Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-5188

Oracle connector does not capture column value change to NULL in specific scenario

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • None
    • 1.9.2.Final
    • oracle-connector
    • None
    • False
    • None
    • False

      Bug report

      In specific scenario when:

      • two updates are executed for the same row in single transaction
      • one of the column is updated to NULL value
      • lob.enabled option is true

      The value of column updated to NULL is not captured properly. The value is still a value before updated instead of being null.

      What Debezium connector do you use and what version?

      1.9.2.Final

      What is the connector configuration?

      {
        "name" : "test_connector",
        "config" : {
          "connector.class" : "io.debezium.connector.oracle.OracleConnector",
          "database.hostname" : "10.232.31.229",
          "database.port" : "1521",
          "database.user" : "dbzuser",
          "database.password" : "***",
          "database.dbname" : "TESTINT",
          "database.server.name" : "oracle12c",
          "database.history.kafka.bootstrap.servers" : "kafka:9091",
          "database.history.kafka.topic" : "schema-changes",
          "schema.include.list" : "DEV_PZ",
          "table.include.list" : "DEV_PZ.TEST_TABLE",
          "snapshot.mode" : "schema_only",
          "log.mining.strategy" : "online_catalog",
          "lob.enabled" : true
        }
      } 

      What is the captured database version and mode of depoyment?

      Oracle (ver. Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 

      How to reproduce the issue using our tutorial deployment?

      Initial script:

      CREATE TABLE TEST_TABLE (
          COL_NO NUMBER(10),
          COL_TEXT1 VARCHAR(50),
          COL_TEXT2 VARCHAR(50)
      );
      
      ALTER TABLE TEST_TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
      
      INSERT INTO TEST_TABLE VALUES (1, 'Text1', 'Text2'); 
      
      COMMIT;

       

      when following updates are executed:

      update TEST_TABLE set COL_TEXT1 = 'Text1_modified' where COL_NO = 1;
      update TEST_TABLE set COL_TEXT2 = NULL where COL_NO = 1;
      COMMIT; 

      in generated message the value of column COL_TEXT2 is still 'Text2' instead of null:

      {"before":{"COL_NO":1,"COL_TEXT1":"Text1","COL_TEXT2":"Text2"},"after":{"COL_NO":1,"COL_TEXT1":"Text1_modified","COL_TEXT2":"Text2"},"source":{"version":"1.9.2.Final","connector":"oracle","name":"oracle12c","ts_ms":1654091804000,"snapshot":"false","db":"TESTINT","sequence":null,"schema":"DEV_PZ","table":"TEST_TABLE","txId":"17000d00dc210000","scn":"89191751","commit_scn":"89191260","lcr_position":null},"op":"u","ts_ms":1654091807263,"transaction":null} 

      What's interesting any change of value to non NULL in second update is captured properly.

       

              ccranfor@redhat.com Chris Cranford
              pawelzawitowski Pawel Zawitowski (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: