The Compatibility Challenge
Why CDC, EBR, and online DDL create a multi-layer problem.
Three moving parts
All redo-based CDC tools read raw redo logs and depend on a stable data dictionary. Oracle's Edition-Based Redefinition (EBR) and online DDL modify that dictionary on a live system. How well a CDC tool handles this determines if the pipeline survives an application upgrade without data loss.
Mine redo logs. Expect a stable, consistent data dictionary for schema metadata.
Lets old and new application versions run simultaneously against the same database.
Modifies schema while DML continues. Requires a brief exclusive lock at completion.
The three tools
Native EBR awareness. Integrated Extract captures edition context in trail file. The only tool that handles EBR cutovers automatically.
Built on Oracle Streams, deprecated since 11g. Cannot capture ALTER DATABASE DEFAULT EDITION. Not viable for new deployments.
Not EBR-aware. Session binds to edition at connect time. EBR cutover causes silent data loss on new columns.
Supplemental Logging
The mandatory prerequisite for all redo-based CDC.
Why it is required
Without supplemental logging, redo records for UPDATE and DELETE may not contain enough information to identify the affected row. Oracle records only the minimum data needed for its own crash recovery. Supplemental logging instructs it to include additional columns.
Two configuration levels
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA enables minimal supplemental logging. Required as a prerequisite for all finer-grained settings. Enabling it acquires a shared TX lock and waits for in-flight transactions to complete. After it completes, all DML cursors in the shared pool are invalidated, causing a brief re-parse spike.
Enables logging of key columns for specific tables or schemas. Oracle follows a hierarchy: primary key first, then unique key, then all columns if neither exists.
Performance warning
Logging all columns is a performance anti-pattern. For a high-volume UPDATE on a 75-column table, enabling all-column supplemental logging increased redo size by over 300%. Key-based logging avoids this cost.
For GoldenGate, use ADD SCHEMATRANDATA rather than table-level ADD TRANDATA. It automatically covers all current and future tables in the schema and is a prerequisite for DDL replication.
EBR Architecture
How Edition-Based Redefinition works and what it means for CDC.
Three components
A private namespace for editioned objects. The default edition is ora$base. New editions are created as children of existing ones. Each database session runs in one edition. Different sessions can run in different editions concurrently.
Tables are non-editioned: shared globally across all editions. Only editioned objects (PL/SQL, views, synonyms) have per-edition versions. Developers create an editioning view over the base table. In the new edition, the view exposes the new column. In the old edition, the view hides it. Application code queries the view, not the table directly.
During the transition period when both application versions are live, cross-edition triggers synchronize data between old and new columns. Forward triggers fire on pre-upgrade DML and populate new columns. Reverse triggers propagate post-upgrade changes back to old columns for sessions still on the previous edition.
The cutover moment
EBR cutover is a single DDL statement:
New sessions connect to the new edition. Existing sessions remain on the old one until they disconnect. A CDC tool that cannot capture this statement loses its edition context the moment the cutover fires.
Online DDL and Lock Contention
"Online" does not mean lock-free.
The exclusive DDL lock
Oracle's online DDL allows schema modifications while DML continues, but at the completion of any online DDL operation, Oracle must acquire a brief exclusive DDL lock. A long-running transaction holding any lock on the object blocks this final phase.
While DDL waits, new DML sessions queue behind it, potentially stalling the application. CDC replication lag accumulates rapidly — the Extract process is starved of new redo. Once DDL completes, the connector faces a large backlog.
Oracle 23ai: Lock-Free Reservation
In Oracle 23ai, Lock-Free Reservation reduces this collateral damage. For numeric columns declared RESERVABLE, UPDATE statements do not take a standard row-level lock. The delta is recorded in a reservation journal and the lock is deferred until commit time.
If a long-running transaction blocks DDL's final lock, other sessions updating reservable columns in the same table can still proceed. The DDL still waits, but the blast radius is limited. GoldenGate 23ai explicitly supports capturing and replicating changes to reservable columns.
Oracle 19c mitigation
The recommended mitigation in 19c is to pause DML on the affected table, let the pipeline drain, execute the DDL, then resume. This is a controlled mini-outage rather than a silent one. Online DDL on 19c also has documented restrictions: ALTER TABLE ... MOVE PARTITION ONLINE is not permitted for index-organized tables or tables containing object types.
Tool: Oracle GoldenGate
The only CDC tool with native EBR awareness.
Gold standard
RecommendedGoldenGate's Integrated Extract captures the edition context of each DDL statement and stores it in the trail file. The Replicat process on the target issues ALTER SESSION SET EDITION before applying the DDL, keeping the target in sync with the source's edition state throughout an upgrade.
Full EBR lifecycle capture
GoldenGate captures the full EBR lifecycle with no manual connector intervention during cutover:
CREATE EDITION- Editioning view changes
- Editioned PL/SQL object versions
ALTER DATABASE DEFAULT EDITION— the cutover command
Enhanced in Oracle 23ai to handle previously blocking online DDL operations.
Known bugs as signs of maturity
Extract abend during online DDL when a column was marked UNUSED and EXCLUDEHIDDENCOLUMNS was enabled. Patched.
Parallel Replicat unnecessarily invalidated its metadata cache on space management DDL. Patched.
Documented and patched. Oracle actively tests this scenario — this reflects maturity, not fragility.
Tool: Oracle XStream
Deprecated. Not viable for new deployments.
Not viable
Deprecated since 11gXStream is built on Oracle Streams, deprecated as of Oracle 11g. It does not support ALTER DATABASE DDL commands. The outbound server ignores several DDL types including RENAME.
The EBR cutover problem
XStream cannot capture ALTER DATABASE DEFAULT EDITION, making it unable to track an EBR cutover. There is no workaround. An EBR cutover is invisible to XStream's outbound server.
Support status
XStream is included with Oracle Enterprise Edition at no additional license cost, but deprecated means no new feature development and eventual removal. Oracle does not recommend XStream for new deployments.
Tool: Debezium (LogMiner)
Architectural mismatch with EBR. Silent data loss on cutover.
Not EBR-aware
High Data Loss RiskA connector session binds to the database's default edition at connect time. It has no mechanism to detect or respond to ALTER DATABASE DEFAULT EDITION.
When an EBR cutover occurs, the connector remains in the old edition context while new application sessions write data through new editioning views. Data written to new columns is invisible to the connector. This is not a bug — it is an architectural mismatch between a stateless external LogMiner client and Oracle's edition-scoped data model.
LogMiner strategy trade-offs
Writes the data dictionary into the redo stream periodically. More reliable for schema changes but adds redo overhead to the source database.
Reads the live dictionary. Lower overhead but brittle: if the connector processes an archive log from before a DDL change, it uses the wrong dictionary version and can misinterpret data or fail.
Attempts online catalog with fallback resolution. Adds complexity. Has had CPU overhead issues in recent releases.
Required EBR cutover procedure
Every EBR cutover requires these manual steps:
- Stop the connector
- Delete the schema history Kafka topic
- Restart the connector
- Trigger an incremental snapshot for affected tables
Data written to new columns during the outage window is lost. This stop-reset-restart cycle is also an opportunity for operator error.
Tool Comparison
GoldenGate, XStream, and Debezium across key EBR and DDL dimensions.
Feature strength (1 = poor, 5 = excellent)
| Feature | GoldenGate | XStream | Debezium |
|---|---|---|---|
| EBR awareness | Native | None | None |
| ALTER DATABASE DEFAULT EDITION | Captured and replicated | Not supported | Not detected |
| Online DDL handling | High (enhanced in 23ai) | Low | Low (strategy-dependent) |
| EBR cutover | Automatic | Not possible | Manual stop/reset/restart |
| Data loss risk on cutover | None | N/A (not viable) | High |
| License | Per-CPU | Incl. with EE (deprecated) | Apache 2.0 (free) |
Configuration Recommendations
Three tiers based on EBR compatibility and production risk.
Gold standard
Oracle 23ai + GoldenGate 23aiEnable ARCHIVELOG mode with FORCE LOGGING. Use schema-level supplemental logging: run ADD SCHEMATRANDATA <schema_name> in GGSCI for each application schema. Configure Integrated Extract with the DDL parameter in both Extract and Replicat parameter files.
DDLOPTIONS EXCLUDETAG '00' -- on ExtractDBOPTIONS SETTAG '00' -- on ReplicatThis configuration handles EBR upgrades automatically. No manual intervention during cutover.
Viable production
Oracle 19c + GoldenGate 19c/21cSame configuration as above. Higher risk due to 19c lock contention patterns. Required mitigations:
- Test every DDL statement under production-equivalent load before deployment
- Schedule DDL for low-traffic periods
- Document a "pause DML" procedure for high-risk DDL on critical tables
Not recommended
Debezium with EBRIf Debezium is unavoidable, use log.mining.strategy=redo_log_catalog. Set snapshot.locking.mode=none. Run the initial snapshot during a period with no DML or DDL on captured schemas.
Accept that every EBR cutover requires a manual stop, schema history topic deletion, connector restart, and incremental snapshot. Accept that data written to new columns during the outage window is lost.