Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-8895

DDL parsing fails on "BY USER FOR STATISTICS" virtual column clause

XMLWordPrintable

    • Critical

      What Debezium connector do you use and what version?

      2.7

      What is the connector configuration?

      {
      "column.include.list": "<hidden>",
      "connector.class": "io.debezium.connector.oracle.OracleConnector",
      "converters": "timestampConverter",
      "database.connection.adapter": "logminer",
      "database.dbname": "${<hidden>}",
      "database.hostname": "${<hidden>}",
      "database.initial.statements": "<hidden>",
      "database.password": "${file:<hidden>}",
      "database.port": "${file:/<hidden>}",
      "database.user": "${file:/<hidden>}",
      "decimal.handling.mode": "string",
      "key.converter": "io.confluent.connect.avro.AvroConverter",
      "key.converter.basic.auth.credentials.source": "USER_INFO",
      "key.converter.basic.auth.user.info": "${<hidden>}:${<hidden>}",
      "key.converter.schema.registry.url": "${<hidden>}",
      "log.mining.query.filter.mode": "in",
      "log.mining.strategy": "online_catalog",
      "name": "fcs-source-streaming-connector",
      "producer.override.batch.size": "200000",
      "producer.override.compression.type": "lz4",
      "producer.override.enable.idempotence": "true",
      "producer.override.linger.ms": "110",
      "provide.transaction.metadata": "true",
      "schema.history.internal.consumer.sasl.jaas.config": "org.apache.kafka.common.security.plain.PlainLoginModule required username='${file:/<hidden>}' password='${file:/<hidden>}';",
      "schema.history.internal.consumer.sasl.mechanism": "PLAIN",
      "schema.history.internal.consumer.security.protocol": "SASL_SSL",
      "schema.history.internal.kafka.bootstrap.servers": "${env:BOOTSTRAP_SERVERS}",
      "schema.history.internal.kafka.topic": "<hidden>",
      "schema.history.internal.producer.sasl.jaas.config": "org.apache.kafka.common.security.plain.PlainLoginModule required username='${file:<hidden>}' password='${file:<hidden>}';",
      "schema.history.internal.producer.sasl.mechanism": "PLAIN",
      "schema.history.internal.producer.security.protocol": "SASL_SSL",
      "schema.history.internal.store.only.captured.databases.ddl": "true",
      "schema.history.internal.store.only.captured.tables.ddl": "true",
      "schema.include.list": "<hidden>",
      "snapshot.mode": "configuration_based",
      "snapshot.mode.configuration.based.snapshot.data": "false",
      "snapshot.mode.configuration.based.snapshot.on.data.error": "false",
      "snapshot.mode.configuration.based.snapshot.on.schema.error": "false",
      "snapshot.mode.configuration.based.snapshot.schema": "true",
      "snapshot.mode.configuration.based.start.stream": "true",
      "table.include.list": "<hidden one table name>",
      "tasks.max": "1",
      "timestampConverter.type": "com.finnova.ebus.connect.converter.TimestampToStringConverter",
      "tombstones.on.delete": "false",
      "topic.prefix": "<hidden>",
      "topic.transaction": "<hidden>",
      "value.converter": "io.confluent.connect.avro.AvroConverter",
      "value.converter.basic.auth.credentials.source": "USER_INFO",
      "value.converter.basic.auth.user.info": "${<hidden>}",
      "value.converter.schema.registry.url": "${<hidden>}"
      }

      What is the captured database version and mode of deployment?

      Oracle 19c

      What behavior do you expect?

      No exception and that the ddl is parsed and store

      What behavior do you see?

      Exception in the log:

      2025-04-08 11:21:40,240 - ERROR [debezium-oracleconnector-ldt.tenant-949.ebus.fcs-source-change-event-source-coordinator:LogMinerStreamingChangeEventSource@262] - Mining session stopped due to error.
      io.debezium.text.ParsingException: DDL statement couldn't be parsed. Please open a Jira issue with the statement 'alter table "<hidden>"."<hidden>" add (SYS_STUWW2ZJ0EFAMXG#N$#W73I2XL as (decode(<hidden column name>,<hidden Package name>.<hidden variable>,1,decode(<hidden Package name>.<hidden function name>(<hidden column name>),1,1,0))) virtual BY USER for statistics);'
      mismatched input 'BY' expecting {')', ','}
          at io.debezium.antlr.ParsingErrorListener.syntaxError(ParsingErrorListener.java:43)
          at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
          at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:543)
          at org.antlr.v4.runtime.DefaultErrorStrategy.reportInputMismatch(DefaultErrorStrategy.java:327)
          at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:139)
          at io.debezium.ddl.parser.oracle.generated.PlSqlParser.add_column_clause(PlSqlParser.java)
          at io.debezium.ddl.parser.oracle.generated.PlSqlParser.add_modify_drop_column_clauses(PlSqlParser.java)
          at io.debezium.ddl.parser.oracle.generated.PlSqlParser.column_clauses(PlSqlParser.java)
          at io.debezium.ddl.parser.oracle.generated.PlSqlParser.alter_table(PlSqlParser.java)
          at io.debezium.ddl.parser.oracle.generated.PlSqlParser.unit_statement(PlSqlParser.java:2513)
          at io.debezium.ddl.parser.oracle.generated.PlSqlParser.sql_script(PlSqlParser.java:2137)
          at io.debezium.connector.oracle.antlr.OracleDdlParser.parseTree(OracleDdlParser.java:73)
          at io.debezium.connector.oracle.antlr.OracleDdlParser.parseTree(OracleDdlParser.java:32)
          at io.debezium.antlr.AntlrDdlParser.parse(AntlrDdlParser.java:76)
          at io.debezium.connector.oracle.antlr.OracleDdlParser.parse(OracleDdlParser.java:68)
          at io.debezium.connector.oracle.OracleSchemaChangeEventEmitter.emitSchemaChangeEvent(OracleSchemaChangeEventEmitter.java:104)
          at io.debezium.pipeline.EventDispatcher.dispatchSchemaChangeEvent(EventDispatcher.java:388)
          at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.handleSchemaChange(AbstractLogMinerEventProcessor.java:826)
          at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.handleSchemaChange(MemoryLogMinerEventProcessor.java:176)
          at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:403)
          at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:320)
          at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.process(AbstractLogMinerEventProcessor.java:241)
          at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:243)
          at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:62)
          at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:312)
          at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:203)
          at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:143)
          at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
          at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
          at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
          at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
          at java.base/java.lang.Thread.run(Thread.java:1583)
      Caused by: org.antlr.v4.runtime.InputMismatchException
          at org.antlr.v4.runtime.DefaultErrorStrategy.sync(DefaultErrorStrategy.java:270)
          ... 27 more

       

      org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped. at io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:67) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:264) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:62) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:312) at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:203) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:143) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: io.debezium.text.ParsingException: DDL statement couldn't be parsed. Please open a Jira issue with the statement 'alter table "F2LDATP0"."KT_SALDO_BEW_JRB" add (SYS_STUWW2ZJ0EFAMXG#N$#W73I2XL as (decode(userbk_nr,DDQVPD00.F_UBV2,1,decode(DDQVPD00.F_InBkListV2(userbk_nr),1,1,0))) virtual BY USER for statistics);' mismatched input 'BY' expecting {')', ','} at io.debezium.antlr.ParsingErrorListener.syntaxError(ParsingErrorListener.java:43) at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41) at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:543) at org.antlr.v4.runtime.DefaultErrorStrategy.reportInputMismatch(DefaultErrorStrategy.java:327) at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:139) at io.debezium.ddl.parser.oracle.generated.PlSqlParser.add_column_clause(PlSqlParser.java) at io.debezium.ddl.parser.oracle.generated.PlSqlParser.add_modify_drop_column_clauses(PlSqlParser.java) at io.debezium.ddl.parser.oracle.generated.PlSqlParser.column_clauses(PlSqlParser.java) at io.debezium.ddl.parser.oracle.generated.PlSqlParser.alter_table(PlSqlParser.java) at io.debezium.ddl.parser.oracle.generated.PlSqlParser.unit_statement(PlSqlParser.java:2513) at io.debezium.ddl.parser.oracle.generated.PlSqlParser.sql_script(PlSqlParser.java:2137) at io.debezium.connector.oracle.antlr.OracleDdlParser.parseTree(OracleDdlParser.java:73) at io.debezium.connector.oracle.antlr.OracleDdlParser.parseTree(OracleDdlParser.java:32) at io.debezium.antlr.AntlrDdlParser.parse(AntlrDdlParser.java:76) at io.debezium.connector.oracle.antlr.OracleDdlParser.parse(OracleDdlParser.java:68) at io.debezium.connector.oracle.OracleSchemaChangeEventEmitter.emitSchemaChangeEvent(OracleSchemaChangeEventEmitter.java:104) at io.debezium.pipeline.EventDispatcher.dispatchSchemaChangeEvent(EventDispatcher.java:388) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.handleSchemaChange(AbstractLogMinerEventProcessor.java:826) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.handleSchemaChange(MemoryLogMinerEventProcessor.java:176) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:403) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:320) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.process(AbstractLogMinerEventProcessor.java:241) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:243) ... 9 more Caused by: org.antlr.v4.runtime.InputMismatchException at org.antlr.v4.runtime.DefaultErrorStrategy.sync(DefaultErrorStrategy.java:270) ... 27 more

      Do you see the same behaviour using the latest released Debezium version?

      Not tested

      Do you have the connector logs, ideally from start till finish?

      Yes

      How to reproduce the issue using our tutorial deployment?

      Deploy and apply the ddl statement in the database

      Feature request or enhancement

      N/A

      Which use case/requirement will be addressed by the proposed feature?

      N/A

      Implementation ideas (optional)

      Correct the parser

              ccranfor@redhat.com Chris Cranford
              joerg.baechtiger@finnova.com Jörg Bächtiger (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: