-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
False
-
False
-
Undefined
-
As mentioned in DBZ-3193, ant0nk reported an update DML that had no where clause failed to be parsed.
update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;
The stack trace is as follows:
ERROR Mining session stopped due to the {} (io.debezium.connector.oracle.logminer.LogMinerHelper:561) io.debezium.connector.oracle.logminer.parser.DmlParserException: DML statement couldn't be parsed. Please open a Jira issue with the statement 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;'. You can set internal.log.mining.dml.parser='legacy' as a workaround until the parse error is fixed. at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:293) at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.processResult(LogMinerQueryResultProcessor.java:199) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:182) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:140) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:113) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: io.debezium.connector.oracle.logminer.parser.DmlParserException: Failed to parse update DML: 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;' at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:176) at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parse(LogMinerDmlParser.java:81) at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:283) ... 9 more Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 108 at java.lang.String.substring(String.java:1963) at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseWhereClause(LogMinerDmlParser.java:454) at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:149) ... 11 more [2021-03-03 18:55:21,984] ERROR Producer failure (io.debezium.pipeline.ErrorHandler:31) io.debezium.connector.oracle.logminer.parser.DmlParserException: DML statement couldn't be parsed. Please open a Jira issue with the statement 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;'. You can set internal.log.mining.dml.parser='legacy' as a workaround until the parse error is fixed. at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:293) at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.processResult(LogMinerQueryResultProcessor.java:199) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:182) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:140) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:113) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: io.debezium.connector.oracle.logminer.parser.DmlParserException: Failed to parse update DML: 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;' at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:176) at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parse(LogMinerDmlParser.java:81) at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:283) ... 9 more Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 108 at java.lang.String.substring(String.java:1963) at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseWhereClause(LogMinerDmlParser.java:454) at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:149) ... 11 more
Isn't it suprising that V$LOGMINER_CONTENTS can output such updates at all given that Debezium can collect Before-state only using WHERE-clause?