-
Bug
-
Resolution: Done
-
Major
-
None
-
None
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