Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-34868

[Bug] oracle-cdc cannot read oracle multitenant pdb binlog: ORA-00942: table or view does not exist (LOG_MINING_FLUSH)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • Flink CDC

    Description

          1. Search before asking
      • [X] I searched in the [issues|https://github.com/ververica/flink-cdc-connectors/issues) and found nothing similar.
          1. Flink version

      1.15.3

          1. Flink CDC version

      2.4.0

          1. Database and its version

      oracle 19c

          1. Minimal reproduce step

      1. setup oracle env according to oracle cdc cdb-database doc: https://ververica.github.io/flink-cdc-connectors/release-2.4/content/connectors/oracle-cdc.html
      2. using oracle cdc to read oracle log and print the data

          1. What did you expect to see?

      when i insert one record to my oracle table, i expect to see the line printed in flink log.
      When i use oracle-cdc 2.3, it works fine.

          1. What did you see instead?

      error message as below:
      java.lang.RuntimeException: One or more fetchers have encountered exception
      at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcherManager.checkErrors(SplitFetcherManager.java:225)
      at org.apache.flink.connector.base.source.reader.SourceReaderBase.getNextFetch(SourceReaderBase.java:169)
      at org.apache.flink.connector.base.source.reader.SourceReaderBase.pollNext(SourceReaderBase.java:130)
      at org.apache.flink.streaming.api.operators.SourceOperator.emitNext(SourceOperator.java:385)
      at org.apache.flink.streaming.runtime.io.StreamTaskSourceInput.emitNext(StreamTaskSourceInput.java:68)
      at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:65)
      at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:519)
      at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:203)
      at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:807)
      at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:756)
      at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:948)
      at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:927)
      at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:741)
      at org.apache.flink.runtime.taskmanager.Task.run(Task.java:563)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: java.lang.RuntimeException: SplitFetcher thread 0 received unexpected exception while polling the records
      at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:150)
      at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:105)
      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)
      ... 1 more
      Caused by: com.ververica.cdc.connectors.shaded.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:50)
      at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:261)
      at com.ververica.cdc.connectors.oracle.source.reader.fetch.OracleStreamFetchTask$RedoLogSplitReadTask.execute(OracleStreamFetchTask.java:134)
      at com.ververica.cdc.connectors.oracle.source.reader.fetch.OracleStreamFetchTask.execute(OracleStreamFetchTask.java:72)
      at com.ververica.cdc.connectors.base.source.reader.external.IncrementalSourceStreamFetcher.lambda$submitTask$0(IncrementalSourceStreamFetcher.java:89)
      ... 5 more
      Caused by: io.debezium.DebeziumException: Failed to flush Oracle LogWriter (LGWR) buffers to disk
      at io.debezium.connector.oracle.logminer.logwriter.CommitLogWriterFlushStrategy.flush(CommitLogWriterFlushStrategy.java:89)
      at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:208)
      ... 8 more
      Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

      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.T4CStatement.doOall8(T4CStatement.java:229)
      at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:41)
      at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:928)
      at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1205)
      at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1823)
      at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1778)
      at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:303)
      at io.debezium.jdbc.JdbcConnection.lambda$execute$3(JdbcConnection.java:430)
      at io.debezium.jdbc.JdbcConnection.execute(JdbcConnection.java:447)
      at io.debezium.jdbc.JdbcConnection.execute(JdbcConnection.java:424)
      at io.debezium.connector.oracle.logminer.logwriter.CommitLogWriterFlushStrategy.flush(CommitLogWriterFlushStrategy.java:86)
      ... 9 more
      Caused by: Error : 942, Position : 7, Sql = UPDATE LOG_MINING_FLUSH SET LAST_SCN = 11664853015964, OriginalSql = UPDATE LOG_MINING_FLUSH SET LAST_SCN = 11664853015964, Error Msg = ORA-00942: table or view does not exist

      at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513]
      ... 25 more

          1. Anything else?

      the message say "LOG_MINING_FLUSH doesnot exist". i find this table only exist in oracle pdb container.

      i guess the oracle-cdc code intends to create this table in cdb. but it incorrectly create this table in pdb.

      so i manually create this table in cdb and the oracle-cdc works. the flink job just print the record in log

          1. Are you willing to submit a PR?
      • [ ] I'm willing to submit a PR!

      ---------------- Imported from GitHub ----------------
      Url: https://github.com/apache/flink-cdc/issues/3044
      Created by: abcdeian
      Labels: bug,
      Created at: Mon Jan 29 18:04:25 CST 2024
      State: open

      Attachments

        Activity

          People

            Unassigned Unassigned
            flink-cdc-import Flink CDC Issue Import
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: