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

Unable to get changes when service name like orclpdb1.localhost

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Obsolete
    • Icon: Major Major
    • None
    • 0.9.5.Final
    • oracle-connector
    • None

      My config like:

      • Oracle: pluggable db,
        *service name:* `ORCLCDB.localhost` and `ORCLPDB1.localhost`
        *sid:* `ORCLCDB` and `ORCLPDB1`
      • Confluent platform 5.2.1
      • Connector config:
      {
        "connector.class" : "io.debezium.connector.oracle.OracleConnector",
        "tasks.max" : "1",
        "database.server.name" : "server1",
        "database.hostname" : "localhost",
        "database.port" : "32769",
        "database.user" : "c##xstrm",
        "database.password" : "xs",
        "database.dbname" : "ORCLCDB.localdomain",
        "database.pdb.name" : "ORCLPDB1",
        "database.tablename.case.insensitive": "true",
        "table.whitelist" : "ORCLPDB1.DEBEZIUM.products",
        "database.out.server.name" : "dbzxout",
        "database.history.kafka.bootstrap.servers" : "localhost:9092",
        "database.history.kafka.topic": "schema-changes.inventory",
        "database.tablename.case.insensitive": true
      }
      

      In this scenario debezium can't catch the changes because it thinks the wihe listed table is
      different from the table coming from the LCR. because
      private TableId getTableId(LCR lcr) in LcrEventHandler.java returns ORCLPDB1.LOCALDOMAIN

      and constructed tableId becomes ORCLPDB1.LOCALDOMAIN.DEBEZIUM.products
      which is different from the white listed table.

      *To overcome this issue i made a below dirty solution:*

      • added config.
        "database.tablename.case.insensitive": true
      • private TableId getTableId(LCR lcr) }} in {{LcrEventHandler.java returns ORCLPDB1.LOCALDOMAIN
        but the table name is {{ ORCLPDB1.DEBEZIUM.PRODUCTS}}

      so for workaround i split the string and take only ORCLPDB1
      like

          String sourceDatabaseName = lcr.getSourceDatabaseName();
          sourceDatabaseName = sourceDatabaseName.split("\\.")[0];
      
      • Also In TableId.java

      I changed the toLowecase method to-lowercase everything

          public TableId toLowercase() {
             return new TableId(catalogName.toLowerCase(), schemaName.toLowerCase(), tableName.toLowerCase());
         }
      

              Unassigned Unassigned
              jpechane Jiri Pechanec
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: