Architecture
LogMiner reads Oracle redo logs directly via SQL. No Oracle GoldenGate license required. Debezium persists its System Change Number (SCN) position and full DDL history to a relational database via JDBC, so Kafka is not needed for state management.
Configuration generator
Deployment parameters
Safe production defaults. Poll every second, moderate batch and queue sizes.
Captures current state of all tables, then begins streaming.
Performance impact
quarkus.log.level=INFO
quarkus.log.category."io.debezium".level=INFO
debezium.sink.type=kafka
debezium.source.connector.class=io.debezium.connector.oracle.OracleConnector
debezium.source.topic.prefix=ora_prod
debezium.source.database.hostname=${ORACLE_HOST}
debezium.source.database.port=${ORACLE_PORT}
debezium.source.database.user=${ORACLE_USER}
debezium.source.database.password=${ORACLE_PASSWORD}
debezium.source.database.dbname=${ORACLE_CDB_NAME}
debezium.source.database.pdb.name=${ORACLE_PDB_NAME}
debezium.source.database.connection.adapter=logminer
debezium.source.log.mining.strategy=online_catalog
debezium.source.snapshot.mode=initial
debezium.source.table.include.list=${TABLE_INCLUDE_LIST}
debezium.source.heartbeat.interval.ms=10000
debezium.source.signal.data.collection=${ORACLE_SCHEMA}.debezium_signal
debezium.source.poll.interval.ms=1000
debezium.source.max.batch.size=2048
debezium.source.max.queue.size=8192
debezium.source.time.precision.mode=adaptive
debezium.source.offset.storage=io.debezium.storage.jdbc.offset.JdbcOffsetBackingStore
debezium.source.offset.storage.jdbc.url=${OFFSETS_JDBC_URL}
debezium.source.offset.storage.jdbc.user=${OFFSETS_JDBC_USER}
debezium.source.offset.storage.jdbc.password=${OFFSETS_JDBC_PASSWORD}
debezium.source.offset.storage.jdbc.offset.table.name=debezium_offsets
debezium.source.schema.history.internal=io.debezium.storage.jdbc.history.JdbcSchemaHistory
debezium.source.schema.history.internal.jdbc.url=${HISTORY_JDBC_URL}
debezium.source.schema.history.internal.jdbc.user=${HISTORY_JDBC_USER}
debezium.source.schema.history.internal.jdbc.password=${HISTORY_JDBC_PASSWORD}
debezium.source.schema.history.internal.jdbc.schema.history.table.name=debezium_schema_history
CREATE TABLE debezium_offsets (
id VARCHAR(255) NOT NULL,
offset_key VARCHAR(1024),
offset_val VARCHAR(2048),
record_insert_ts TIMESTAMP NOT NULL,
record_insert_seq INTEGER NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE debezium_schema_history (
id VARCHAR(255) NOT NULL,
history_data CLOB,
history_data_seq INTEGER,
record_insert_ts TIMESTAMP NOT NULL,
record_insert_seq INTEGER NOT NULL,
PRIMARY KEY(id)
);
ORACLE_HOST=your-oracle-ip-or-dns
ORACLE_PORT=1521
ORACLE_USER=c##debezium
ORACLE_PASSWORD=strong_password
ORACLE_CDB_NAME=ORCLCDB
ORACLE_PDB_NAME=ORCLPDB1
ORACLE_SCHEMA=inventory
TABLE_INCLUDE_LIST=inventory.customers,inventory.orders
OFFSETS_JDBC_URL=jdbc:postgresql://db:5432/debezium_state
OFFSETS_JDBC_USER=state_user
OFFSETS_JDBC_PASSWORD=state_pass
HISTORY_JDBC_URL=jdbc:postgresql://db:5432/debezium_state
HISTORY_JDBC_USER=state_user
HISTORY_JDBC_PASSWORD=state_pass
Oracle prerequisites and validation
Oracle preflight checklist
-
+
ARCHIVELOG modeSELECT log_mode FROM v$database;
-
+
Supplemental logging
Database-level minimal logging plus table-level ALL logging.
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;ALTER TABLE schema.table ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; -
+
Debezium user grants
Create a dedicated user. Do not grant DBA.
GRANT CREATE SESSION, LOGMINING TO c##debezium;GRANT SELECT ON V_$DATABASE TO c##debezium;GRANT FLASHBACK ANY TABLE TO c##debezium;See the research guide for the full grants table.
-
+
Oracle compatibility
The compatible parameter must be at least 12.2 for CDB/PDB mining.
Validation steps
Confirm Debezium loads JDBC offsets and starts mining.
Both should return HTTP 200 with status UP.
Add a column to a captured table, then verify the schema history table received the event.
Stop the connector, make a data change, restart. Confirm the connector resumes from the last committed offset and captures the missed change.
The offset table is append-only. Schedule a periodic cleanup job to delete rows older than your retention window. The schema history table grows more slowly but should also be monitored.