Skip to main content

Create Oracle User and Grant Required Permissions

Use LogMiner (Recommended for 3.3.x)

-------PDB

CREATE USER debezium IDENTIFIED BY "StrongPassword";

GRANT CONNECT, RESOURCE TO debezium;

GRANT CREATE SESSION TO debezium;

GRANT SELECT ON V_$DATABASE TO debezium;

GRANT SELECT ON V_$LOG TO debezium;

GRANT SELECT ON V_$LOGFILE TO debezium;

GRANT SELECT ON V_$ARCHIVED_LOG TO debezium;

GRANT SELECT ON V_$INSTANCE TO debezium;

GRANT FLASHBACK ANY TABLE TO debezium;

GRANT SELECT ANY TRANSACTION TO debezium;

GRANT SELECT ANY DICTIONARY TO debezium;

GRANT LOGMINING TO debezium;

---------CDB

ALTER DATABASE FORCE LOGGING;

SHOW PARAMETER db_recovery_file_dest;

SHOW PARAMETER db_recovery_file_dest_size;

Also make sure ARCHIVELOG mode is enabled:


ARCHIVE LOG LIST;

If not enabled:

SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;



Enable Supplemental Logging (MANDATORY)

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

Check status:

SELECT supplemental_log_data_min, supplemental_log_data_pk,
       supplemental_log_data_fk, supplemental_log_data_ui,
       supplemental_log_data_all
FROM v$database;

Enable GoldenGate Replication Flag (Needed for Debezium LogMiner)

ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;

FIX: Grant Tablespace Quota to Debezium User Using PDB

ALTER USER debezium QUOTA UNLIMITED ON USERS;


Now run these inside the PDB:

GRANT EXECUTE_CATALOG_ROLE TO debezium;
GRANT SELECT_CATALOG_ROLE TO debezium;

GRANT EXECUTE ON SYS.DBMS_LOGMNR TO debezium;
GRANT EXECUTE ON SYS.DBMS_LOGMNR_D TO debezium;

CREATE OR REPLACE PUBLIC SYNONYM DBMS_LOGMNR FOR SYS.DBMS_LOGMNR;
CREATE OR REPLACE PUBLIC SYNONYM DBMS_LOGMNR_D FOR SYS.DBMS_LOGMNR_D;



Create Debezium Oracle Connector Config

{
  "name": "oracle-connector",
  "config": {
    "connector.class": "io.debezium.connector.oracle.OracleConnector",
    "tasks.max": "1",
    "database.hostname": "192.168.1.225",
    "database.port": "1521",
    "database.user": "debezium",
    "database.password": "StrongPassword",
    "database.dbname": "ORCLPDB1",
    "topic.prefix": "oracle",
    "database.connection.adapter": "logminer",
    "database.history.kafka.bootstrap.servers": "192.168.1.226:9092",
    "database.history.kafka.topic": "schema-changes.oracle",
    "snapshot.mode": "initial"
  }
}

Register Connector:

 

curl -X POST -H "Content-Type: application/json" \
  --data @/opt/kafka/connect/oracle.json \
  http://localhost:8083/connectors

 

Verify Connector

curl http://localhost:8083/connectors
curl http://localhost:8083/connectors/oracle-connector/status

Kafka Topics Created

/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list


Consume CDC Message

/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic mysqlserver1.mydb.customers \
--from-beginning


Delete Connector

curl -X DELETE http://localhost:8083/connectors/oracle-connector

Restart Connector

curl -X POST http://localhost:8083/connectors/oracle-connector/restart