Hi
I am using Flink CDC version 3.6 and for certain Oracle tables during the
initial snapshotting phase I get the following stack trace after I specify
one of the columns in the PK as chunk column key.
Interesting thing I have found is that there are composite index on this
column and also standalone index.

Also the column is of type VARCHAR.

Here is the stack trace:

org.apache.flink.util.FlinkException: Global failure triggered by
OperatorCoordinator for 'Source: DCS_PRD_CHLDSKU_SRC -> DCS_PRD_CHLDSKU'
(operator b1a2a2523a4642215643a6a4e58f0d05).
at
org.apache.flink.runtime.operators.coordination.OperatorCoordinatorHolder$LazyInitializedCoordinatorContext.failJob(OperatorCoordinatorHolder.java:651)
at
org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator$QuiesceableContext.failJob(RecreateOnResetOperatorCoordinator.java:248)
at
org.apache.flink.runtime.source.coordinator.SourceCoordinatorContext.failJob(SourceCoordinatorContext.java:427)
at
org.apache.flink.runtime.source.coordinator.SourceCoordinator.lambda$runInEventLoop$10(SourceCoordinator.java:487)
at
org.apache.flink.util.ThrowableCatchingRunnable.run(ThrowableCatchingRunnable.java:40)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.apache.flink.util.FlinkRuntimeException: Chunk splitting has
encountered exception

at
org.apache.flink.cdc.connectors.base.source.assigner.SnapshotSplitAssigner.checkSplitterErrors(SnapshotSplitAssigner.java:687)
at
org.apache.flink.cdc.connectors.base.source.assigner.SnapshotSplitAssigner.getNext(SnapshotSplitAssigner.java:402)
at
org.apache.flink.cdc.connectors.base.source.assigner.HybridSplitAssigner.getNext(HybridSplitAssigner.java:182)
at
org.apache.flink.cdc.connectors.base.source.enumerator.IncrementalSourceEnumerator.assignSplits(IncrementalSourceEnumerator.java:222)
at
org.apache.flink.cdc.connectors.base.source.enumerator.IncrementalSourceEnumerator.handleSplitRequest(IncrementalSourceEnumerator.java:118)
at
org.apache.flink.runtime.source.coordinator.SourceCoordinator.handleRequestSplitEvent(SourceCoordinator.java:572)
at
org.apache.flink.runtime.source.coordinator.SourceCoordinator.lambda$handleEventFromOperator$3(SourceCoordinator.java:299)
at
org.apache.flink.runtime.source.coordinator.SourceCoordinator.lambda$runInEventLoop$10(SourceCoordinator.java:473)...
7 more

Caused by: java.lang.IllegalStateException: Error when splitting chunks for
orcl.PUB.DCS_PRD_CHLDSKU
at
org.apache.flink.cdc.connectors.base.source.assigner.SnapshotSplitAssigner.splitTable(SnapshotSplitAssigner.java:361)
at
org.apache.flink.cdc.connectors.base.source.assigner.SnapshotSplitAssigner.splitChunksForRemainingTables(SnapshotSplitAssigner.java:670)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)... 3
more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "orcl"."PUB".
"DCS_PRD_CHLDSKU": invalid identifier

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:461)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:550)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
at
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:270)
at
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:91)
at
oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:807)
at
oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:983)
at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at
oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3666)
at
oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1426)
at
oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3713)
at
oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1167)
at
io.debezium.jdbc.JdbcConnection.prepareQueryAndMap(JdbcConnection.java:751)
at
org.apache.flink.cdc.connectors.base.source.utils.JdbcChunkUtils.queryMin(JdbcChunkUtils.java:89)
at
org.apache.flink.cdc.connectors.oracle.source.assigner.splitter.OracleChunkSplitter.queryMin(OracleChunkSplitter.java:70)
at
org.apache.flink.cdc.connectors.base.source.assigner.splitter.JdbcSourceChunkSplitter.nextChunkEnd(JdbcSourceChunkSplitter.java:524)
at
org.apache.flink.cdc.connectors.base.source.assigner.splitter.JdbcSourceChunkSplitter.splitOneUnevenlySizedChunk(JdbcSourceChunkSplitter.java:385)
at
org.apache.flink.cdc.connectors.base.source.assigner.splitter.JdbcSourceChunkSplitter.generateSplits(JdbcSourceChunkSplitter.java:132)
at
org.apache.flink.cdc.connectors.base.source.assigner.SnapshotSplitAssigner.splitTable(SnapshotSplitAssigner.java:359)
... 6 more

Caused by: Error : 904, Position : 78, Sql = SELECT MIN("orcl"."PUB".
"DCS_PRD_CHLDSKU") FROM "PUB"."DCS_PRD_CHLDSKU" WHERE "orcl"."PUB".
"DCS_PRD_CHLDSKU" > :1 , OriginalSql = SELECT MIN("orcl"."PUB".
"DCS_PRD_CHLDSKU") FROM "PUB"."DCS_PRD_CHLDSKU" WHERE "orcl"."PUB".
"DCS_PRD_CHLDSKU" > ?, Error Msg = ORA-00904: "orcl"."PUB"."DCS_PRD_CHLDSKU":
invalid identifier

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513)
... 27 more

We can clearly see that SQL generated is a malformed one.
If I remove the chunk column key it works fine, but for big tables chunking
using ROWID takes lots of PGA memory.


Please let me know what could be causing it and if this is a Oracle CDC bug.

I somehow feel there is a bug in this code:

public Object queryMin(
        JdbcConnection jdbc, TableId tableId, Column column, Object
excludedLowerBound)
        throws SQLException {
    // oracle query only use schema and table.
    String quoteSchemaAndTable = OracleUtils.quoteSchemaAndTable(tableId);
    return JdbcChunkUtils.queryMin(
            jdbc, quoteSchemaAndTable,
jdbc.quotedTableIdString(tableId), excludedLowerBound);
}

Here column is not used to calculate queryMin.

Thanks
Sachin

Reply via email to