Skip to main content

Comparison

This page sets the connector beside the two connectors most teams consider for capturing Oracle Database changes into Kafka with LogMiner: Confluent's Oracle CDC Source connector and the Debezium Oracle connector. Statements about those connectors come from their public documentation and issue trackers, linked below, as read on 4 and 5 October 2026 (Debezium 3.7). Statements about this connector describe the code as it is today, not a roadmap. If you find something out of date, please open an issue.

This project does not publish database benchmark figures. The harness is published instead, so you can measure on your own database.

Feature comparison​

CapabilityOSO CDC ConnectorConfluent Oracle CDC SourceDebezium Oracle connector
LicenceApache-2.0Proprietary premium connector, Confluent enterprise licenceApache-2.0
Capture APILogMinerLogMinerLogMiner, XStream or OpenLogReplicator
DeliveryExactly-once, with one or more whole Oracle transactions per Kafka transaction; at-least-once otherwiseAt-least-onceAt-least-once; exactly-once through Kafka Connect, with Kafka transactions per poll batch (transaction.boundary=poll)
TasksOne task; decoding runs on several threadsTask zero mines into a redo log topic; table work is spread across tasksOne task
Long-running transactionsBuffered by the connector, spilled to disk past a heap budget, journaled to Kafka so the restart position can move past themBuffered in connector memory; a threshold with warn or discardThe restart position stays at the start of the oldest open transaction
Transactions the database lostOrphan detection against GV$TRANSACTION, released or stopped by policyNot documentedReported to hold the offset back (dbz#2683)
Missing redoAlways stops with a typed error and a runbookNot documentedLogs a warning and continues from a later point when redo of an open transaction is gone; a fail-fast option is requested in dbz#2713
Initial snapshotChunked, each chunk read as of its own SCN, resumable per chunk after a restart, interleaved with streamingParallel; an incomplete snapshot restarts from the beginningBlocking or incremental
Snapshots on demandsnapshot signal on a Kafka topic, no writes to the sourceNew tables are detected automaticallySignals; read-only incremental snapshots for Oracle are an open request (dbz#2606)
Schema changesPer-table versions on a compacted topic; rows written before a DDL decoded with a dictionary from the redo; renames supportedSeveral DDL forms unsupported, including rename table or column and add or drop constraintsSchema history topic with one partition and unlimited retention
LOB columnsLeave out, assemble inline from redo, or read again as of the commit SCNSeparate LOB topicsInline, with lob.enabled
Several PDBs from one connectorConfigured with cdc.database.pdbs, one mining session at the root (see multi-PDB capture)One PDB per connectorOne PDB per connector (dbz#478)
Quiet databasesHeartbeat records carry the position; no writes to the sourceHeartbeat topicHeartbeats, with an action query that writes to the source where needed
Preflight and setuporacle-cdc-doctor: checks the database and writes the DBA scriptConfiguration validationConfiguration validation
Oracle RACNot supported yetSupportedSupported
Standby captureNot supported yetNot supported; must point to the primaryPhysical standby in archive-log-only mode
Autonomous DatabaseNot supported yetNot supportedNot documented
Commercial supportOSO (enterprise support)ConfluentRed Hat, for its supported builds and configurations

Sources: Confluent's Oracle CDC Source overview, configuration reference and best practices; Debezium's exactly-once delivery documentation, 3.7 release announcement, Red Hat's supported configurations and the issues linked in the table.

Where the connectors agree: all three can read redo through LogMiner (Debezium also offers other adapters), need ARCHIVELOG mode and supplemental logging, and through LogMiner cannot capture what LogMiner does not support, such as identity columns and some of the newest column types.

What this connector does not do yet​

  • Oracle RAC, Amazon RDS for Oracle, Autonomous Database and standby capture.
  • A record format compatible with Confluent's Oracle CDC Source, and separate LOB topics.
  • Transaction metadata records and a schema change topic for consumers.

See the status table for everything that is available.

Measure it yourself​

Oracle's licence terms restrict publishing database benchmark results, so this project publishes the means to measure, not results. Everything below is in the repository and runs on your own database under its own licence.

  • A deterministic workload. bench workload runs a seeded mix of inserts, updates (including key changes), deletes, LOB writes, savepoint and full rollbacks, multi-table transactions, occasional large transactions, truncates and column DDL over several sessions. The same seed and specification always produce the same statements. Every committed transaction writes one row to a ledger table inside the transaction. Specifications live in bench/src/main/resources/workloads.
  • A correctness oracle. bench check consumes the change topics with read_committed, materialises them, and checks three things: each table's materialised state equals the database as of the highest commit SCN seen; the committed transactions in the ledger are exactly the transactions seen in Kafka; and within each transaction the event indexes are complete, with no duplicates and commit SCNs that never go backwards within a partition. It writes an evidence file with a SHA-256 digest. It reads this connector's topics.
  • A soak harness. bench soak runs a paced workload for as many hours as you choose against a running connector, pauses at fixed check points until the connector has caught up, runs the correctness oracle at each one, and samples the connector's metrics from the JMX exporter. The Docker Compose lab runs it with make soak. The figures it records are for your own use; this project does not publish them.
  • A lab to run them in. The Docker Compose lab runs Oracle Database Free, Kafka and Connect; its debezium profile adds a Debezium worker on the same database and Kafka, so both connectors can mine the same workload side by side.
  • Metrics to measure with. Latency and throughput come from the connector's metrics (MillisBehindSource, RowsMined, TransactionsCommitted, LastStepMillis) and from consumer lag on the change topics; memory from BufferHeapBytes, SpilledBytes and the worker's own JVM metrics.
java -jar bench/target/bench-*-cli.jar workload --url jdbc:oracle:thin:@//db:1521/PDB1 \
--user workload --password-env WORKLOAD_PASSWORD --spec bench/src/main/resources/workloads/long-tx.json --reset
java -jar bench/target/bench-*-cli.jar check --bootstrap-servers kafka:9092 \
--url jdbc:oracle:thin:@//db:1521/PDB1 --user workload --password-env WORKLOAD_PASSWORD \
--topic-prefix cdc --pdb PDB1 --tables WL_T1,WL_T2,WL_T3 --out evidence.json

bench check exits with 0 when every check passes, 1 when one fails and 3 when the result is inconclusive (for example when the database could no longer answer the AS OF SCN query).