-
Bug
-
Resolution: Duplicate
-
Major
-
None
-
1.7.2.Final
-
None
-
False
-
None
-
False
你使用什么 Debezium 连接器,什么版本?
<1.7.2.final>
什么是连接器配置?
<oracle>
捕获的数据库版本和部署模式是什么?
<oracle 11g ,local>
你看到什么行为?
<
Now, we have tested such a scenario. We use Oracle connector to monitor a table. After the snapshot completes, we terminate the connector. Then we modify the row data in the table. The sequence is as follows: first change a row of data (add, delete and modify any DML statement), and then change the table structure. For example, modify the field name (alter table rename), and then modify a row of data (update table set columnname =? Where). At this point, starting the Oracle connector will report an error,
We debugged the source code of debezium and found that from $logmnr_ Contents table query SQL_ The redo field contains such SQL "update" inmon " A "set" col 5 "= hextoraw ('80') where" col 1 "= hextoraw ('33') and" col 2 "= hextoraw ('33') and" col 3 "= hextoraw ('c104') and" col 4 "= hextoraw ('c104') and" col 5 "= hextoraw ('c20743')" in fact, there are no such columns in my table "a", which seems to be caused by a problem when logminer dictionary converts the sequence numbers of these columns into field names, But the problem with debezium is: "after resolving to the field name in io/debezium/connector/oracle/logminer/parser/logminerdmlparser.java:408, it will look for the existence of the column in the tower: io/debezium/connector/oracle/logminer/logminerhelper.java:222, and throw a new debeziumexception (" no column '+ columnname ' "found in table ' table.id() +");
>
您在使用最新发布的 Debezium 版本时是否看到相同的行为?
(理想情况下,还可以使用最新的 Alpha/Beta/CR 版本进行验证)
<Not tested>
您是否有连接器日志,最好是从开始到结束?
(稍后可能会要求您提供DEBUG/TRACE级别的日志)
<2022-06-02 11:37:42,170 ERROR [io.deb.pip.ErrorHandler] (debezium-oracleconnector-ora_edw_inmon_server01-change-event-source-coordinator) Producer failure: io.debezium.connector.oracle.logminer.parser.DmlParserException: DML statement couldn't be parsed. Please open a Jira issue with the statement 'update "INMON"."A" set "COL 5" = HEXTORAW('c2020c') where "COL 1" = HEXTORAW('33') and "COL 2" = HEXTORAW('33') and "COL 3" = HEXTORAW('c104') and "COL 4" = HEXTORAW('c104') and "COL 5" = HEXTORAW('80') and "DBZID" = AAAf3WAAAAANGJXAAA;'.
at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.parseDmlStatement(AbstractLogMinerEventProcessor.java:636)
at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.lambda$handleDataEvent$3(AbstractLogMinerEventProcessor.java:448)
at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.addToTransaction(MemoryLogMinerEventProcessor.java:367)
at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.handleDataEvent(AbstractLogMinerEventProcessor.java:427)
at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:220)
at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:178)
at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.process(MemoryLogMinerEventProcessor.java:134)
at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:169)
at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:58)
at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:166)
at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:127)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: io.debezium.connector.oracle.logminer.parser.DmlParserException: Failed to parse update DML: 'update "INMON"."A" set "COL 5" = HEXTORAW('c2020c') where "COL 1" = HEXTORAW('33') and "COL 2" = HEXTORAW('33') and "COL 3" = HEXTORAW('c104') and "COL 4" = HEXTORAW('c104') and "COL 5" = HEXTORAW('80') and "DBZID" = AAAf3WAAAAANGJXAAA;'
at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:167)
at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parse(LogMinerDmlParser.java:81)
at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.parseDmlStatement(AbstractLogMinerEventProcessor.java:630)
... 16 more
Caused by: io.debezium.DebeziumException: No column 'COL 5' found in table 'EDW.INMON.A'
at io.debezium.connector.oracle.logminer.LogMinerHelper.getColumnIndexByName(LogMinerHelper.java:225)
at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseSetClause(LogMinerDmlParser.java:460)
at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:136)
... 18 more>
如何使用我们的教程部署重现问题?
<idea running debezium-server, But I think other deployment methods will also have such problems, because this involves logminer itself>
提议的功能将解决哪个用例/需求?
<>
实施思路(可选)
<
>
- duplicates
-
DBZ-3401 Implement Hybrid Mining Strategy for Oracle, seamless DDL tracking with online catalog performance
- Resolved