DBAtlas · Atlas für Datenbankbetrieb

Änderungsverfolgung (CDC / Change Tracking)

Oracle

-- Read changes from redo logs with LogMiner:
-- 1) Add the archived/redo log file to analyze:
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(
  LOGFILENAME => '/u01/arch/1_1234_1122334455.arc',
  OPTIONS => DBMS_LOGMNR.NEW);
-- 2) Start the session:
EXECUTE DBMS_LOGMNR.START_LOGMNR(
  OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
SELECT sql_redo, sql_undo FROM V$LOGMNR_CONTENTS
WHERE seg_name = 'ORDERS';
-- 3) When finished: EXECUTE DBMS_LOGMNR.END_LOGMNR;
-- For enterprise CDC/replication, Oracle GoldenGate is used.

Oracle verfolgt Änderungen auf Basis des Redo-Logs. LogMiner übersetzt Redo-/Archivlogs in SQL, um vergangene DML zu untersuchen; die zu analysierenden Logdateien werden mit DBMS_LOGMNR.ADD_LOGFILE hinzugefügt. Für aussagekräftige Ergebnisse muss mindestens minimales Supplemental Logging aktiviert sein (ALTER DATABASE ADD SUPPLEMENTAL LOG DATA). Für kontinuierliche CDC mit geringer Latenz und heterogene Replikation ist Oracle GoldenGate (separates Produkt) der Standard; die alten Funktionen Streams/Change Data Capture sind veraltet.

PostgreSQL

-- Create a logical replication (logical decoding) slot:
SELECT * FROM pg_create_logical_replication_slot(
  'cdc_slot', 'wal2json');
-- Consume changes as JSON:
SELECT data FROM pg_logical_slot_get_changes('cdc_slot', NULL, NULL);

Logical Decoding in PostgreSQL wandelt WAL-Einträge über ein Output-Plugin (wal2json, pgoutput, test_decoding) in einen lesbaren Änderungsstrom um; der Replication Slot sorgt dafür, dass keine Änderungen verloren gehen. wal_level muss logical sein. Debezium nutzt diesen Mechanismus für Enterprise-CDC.

MySQL

-- The row-based binlog is the CDC source (binlog_format=ROW):
SHOW BINARY LOGS;
SHOW BINLOG EVENTS IN 'binlog.000042';
-- Usually Debezium/Maxwell reads the binlog and turns it into a stream.

In MySQL ist das Binary Log die CDC-Quelle. Mit binlog_format=ROW wird jede Zeilenänderung aufgezeichnet. Tools wie Debezium oder Maxwell lesen das Binlog wie eine Replica und erzeugen einen Ereignisstrom nach Kafka. Aktiviertes GTID erleichtert die zuverlässige Positionsverfolgung.

SQL Server

-- Enable Change Data Capture on the database and the table:
EXEC sys.sp_cdc_enable_db;
EXEC sys.sp_cdc_enable_table
  @source_schema = N'dbo', @source_name = N'orders',
  @role_name = NULL;
-- For lightweight tracking: ALTER DATABASE ... SET CHANGE_TRACKING = ON;

SQL Server bietet zwei Mechanismen: Change Data Capture (CDC) schreibt alle DML (mit alten/neuen Werten) aus dem Transaktionslog in Änderungstabellen und erfordert SQL Server Agent. Change Tracking verfolgt nur schlank, welche Zeilen sich geändert haben (Nettoänderungen), und hält keine vollständige Datenhistorie.

MongoDB

// Watch changes in real time with Change Streams:
const stream = db.orders.watch([
  { $match: { operationType: { $in: ["insert", "update"] } } }
]);
while (stream.hasNext()) { printjson(stream.next()); }

MongoDB Change Streams, aufgebaut auf dem Oplog, liefern insert-, update- und delete-Ereignisse auf Collection-/Datenbank-/Clusterebene als Echtzeitstrom. Erfordert ein Replica Set oder einen Sharded Cluster. Mit einem resumeToken kann ein Stream nach einer Unterbrechung dort fortgesetzt werden, wo er aufgehört hat; er ist die Grundlage von CDC-Integrationen.

Redis

# Listen for key changes with keyspace notifications:
CONFIG SET notify-keyspace-events KEA
# Subscribe to changed keys via Pub/Sub:
PSUBSCRIBE __keyevent@0__:set
PSUBSCRIBE __keyevent@0__:expired

Redis Keyspace Notifications veröffentlichen Ereignisse zu Schlüsseln (SET, DEL, EXPIRE usw.) über Pub/Sub-Kanäle; aktiviert werden sie mit der Einstellung notify-keyspace-events (K=keyspace, E=keyevent, A=alle Ereignisse). Für einen zuverlässigen, dauerhaften Änderungsstrom werden Redis Streams (XADD/XREAD) bevorzugt.

Elasticsearch

-- Not applicable: there is no built-in CDC/change stream.
# Closest equivalent: incremental query on a timestamp field:
GET orders/_search
{ "query": { "range": { "updated_ts": { "gt": "2026-07-05T00:00:00" } } },
  "sort": [ { "updated_ts": "asc" } ] }

Elasticsearch bietet keinen Change-Data-Capture-Stream (CDC); es meldet nicht nativ, wann sich ein Dokument geändert hat. Üblich ist, jedem Dokument ein Feld updated_ts hinzuzufügen und inkrementelle Abfragen nach Zeitstempel auszuführen (range + sort). Meist wird die CDC der Quelldatenbank in Elasticsearch eingespeist.

In DBAtlas öffnen →