YugabyteDB: Schemaänderungen verarbeiten
Erfahren Sie, wie Sie Schemaänderungen in Oracle GoldenGate für YugabyteDB verarbeiten.
Voraussetzungen für die Behandlung von Schemaänderungen
Um Schemaänderungen auf Tabellen- und Spaltenebene in Yugabyte-Datenbanken zu unterstützen, sind die folgenden Konfigurationen sowohl in T-Server als auch in Master-Gflag-Listen erforderlich:
cdcsdk_publication_list_refresh_interval_secs
-
Definiert das Aktualisierungsintervall für die Veröffentlichungsliste.
-
Konfigurieren Sie nach der für Ihre Umgebung geeigneten Wartezeit (Standard: 900 Sekunden).
cdcsdk_enable_dynamic_table_support
-
Aktiviert die dynamische Tabellenunterstützung in CDC.
-
Standardmäßig ist dieser Wert auf
truegesetzt. Vergewissern Sie sich, dass er sowohl für T-Server als auch für Master-gflags explizit wahr ist.
Richtlinien für die Behandlung von Schemaänderungen in Oracle GoldenGate für Yugabyte
Die folgenden Richtlinien sind wichtig und müssen bei der Ausführung von DDL-Vorgängen in der Yugabyte-Datenbank berücksichtigt werden:
-
Befolgen Sie immer das
cdcsdk_publication_list_refresh_interval_secs-Intervall, bevor Sie DML-Vorgänge ausführen. -
Stoppen Sie den Extract, um sichere Schemaänderungen sicherzustellen und potenzielle Probleme bei der Datenerfassung zu vermeiden.
-
Prüfen Sie nach dem Neustart von Extract immer, ob neue oder verbleibende Spalten ordnungsgemäß erfasst wurden.
-
Die Yugabyte-Datenbank unterstützt das Löschen einer Tabelle nicht. Weitere Informationen finden Sie unter folgendem Link:
Schemaänderungen auf Tabellenebene verarbeiten
Erfahren Sie, wie Sie Schemaänderungen auf Tabellenebene in Oracle GoldenGate für YugabyteDB verarbeiten.
Neue Tabelle zu einem vorhandenen Extraktionsprozess hinzufügen
Dieser Vorgang hängt von der Veröffentlichungskonfiguration von Yugabyte ab. Es gibt zwei Arten von Veröffentlichungen:
-
Veröffentlichung für alle Tabellen konfiguriert: Bei dieser Art der Veröffentlichung werden neue Tabellen dynamisch hinzugefügt, und es sind keine Änderungen an der Veröffentlichung erforderlich.
-
Veröffentlichung für eine Gruppe von Tabellen konfiguriert: Wenn eine neue Tabelle erstellt wird, muss die Veröffentlichung so geändert werden, dass sie die neue Tabelle enthält.
Neue Tabelle zu einem bestehenden Extraktionsprozess hinzufügen
Im Folgenden werden die allgemeinen Schritte zum Hinzufügen einer neuen Tabelle für einen vorhandenen Extract-Prozess beschrieben: 1. Stoppen Sie den Extraktionsprozess, bevor Sie Änderungen vornehmen.
-
Aktualisieren Sie die Extract-Parameterdatei, um die neue Tabelle oder die neuen Tabellen zur Extract-Konfiguration hinzuzufügen.
-
Warten Sie auf das in
cdcsdk_publication_list_refresh_interval_secsdefinierte Aktualisierungsintervall.Lassen Sie optional ein kleines Pufferfenster zu, um sicherzustellen, dass die Tabelle im CDC-Modul vollständig aktualisiert wird.
-
Starten Sie den Extract-Prozess neu, nachdem das Aktualisierungsintervall abgeschlossen ist.
-
DML-Vorgänge für die neue Tabelle ausführen
-
Prüfen Sie, ob der Extract die neuen Datensätze erfolgreich erfasst.
Neue Tabelle zu einem vorhandenen Extraktionsprozess hinzufügen - Beispiel
Betrachten Sie das Szenario für dieses Beispiel:
Eine Tabelle mit zwei konfigurierten Veröffentlichungen ist vorhanden:
-
Publikation 1 (pub1): Spezifische Tabelle
-
Publikation 2 (pub2): Alle Tabellen
-
Zwei Extrakte (Ext1 mit pub1, Ext2 mit pub2) mit statischen Tabellenlisten
-
DML-Vorgänge in der statischen Tabelle werden von beiden Extrakten erfasst
Das folgende Beispiel enthält die Schritte zum Hinzufügen einer neuen Tabelle zu einem vorhandenen Extract-Prozess basierend auf den oben genannten Überlegungen:
-
Stoppen Sie Ext1 und Ext2.
-
Erstellen Sie neue Tabellen (table2, table3).
-
Aktualisieren Sie die Exportparameterdateien für Ext1 und Ext2.
-
Ändern Sie pub1 so, dass neue Tabellen aufgenommen werden. Pub2 erfordert keine Änderungen.
-
Starten Sie Ext1 und Ext2 neu.
-
Warten Sie auf das Aktualisierungsintervall (
cdcsdk_publication_list_refresh_interval_secs). -
Führen Sie DML-Vorgänge für neue Tabellen aus, und prüfen Sie, ob beide Extracts sie erfolgreich erfassen.
Tabelle aus einem Extraktionsprozess löschen
Beim Löschen einer Tabelle müssen zwei Szenarios berücksichtigt werden:
Tabelle ist Teil einer Publikation
Wenn die Tabelle in einer Publikation enthalten ist, ist das Löschen der Tabelle nicht zulässig. Wenn Sie versuchen, die Tabelle in diesem Szenario zu löschen, wird der vom Extract verwendete Stream oder Replikations-Slot unbrauchbar, und es können Fehler auftreten, wie:
2026-03-04 11:21:44 ERROR OGG-30611 Yugabyte has closed the streaming client and has caused the Extract to abend.
Error: ERROR: XX000: LookupByIdRpc(tablet: d092b524eff34d21b45c78ead108122a, num_attempts: 1) failed: Tablet deleted: Table deleted at 2026-03-04 11:21:44 UTC.
CONTEXT: Catalog Version Mismatch: A DDL occurred while processing this query. Try again.LOCATION: YBPrepareCacheRefreshIfNeeded, postgres.c:4160.
Oder
2026-03-04 11:22:51 ERROR OGG-30605 Dropping any table used by the Extract will cause the Extract to abend and disconnect the YDB streaming client.
Error: ERROR: XX000: VirtualWAL initialisation failed for stream_id: afdaa2e91ebc288be74724e8fb780342 & session_id: 51: Table 000033cf00003000800000000000400f not found under stream
CONTEXT: Catalog Version Mismatch: A DDL occurred while processing this query. Try again.LOCATION: YBPrepareCacheRefreshIfNeeded, postgres.c:4160.
Achtung: Wenn solche Fehler auftreten, besteht die einzige Lösung darin, die Registrierung des betroffenen Extract aufzuheben und erneut zu registrieren. Dieser Schritt ist entscheidend, um normale operation.This wiederherzustellen. Dies kann auch zu Datenverlust führen. Daher ist Vorsicht geboten.
Tabelle ist nicht Teil einer Veröffentlichung
Wenn die Tabelle nicht in einer Publikation enthalten ist, hat das Löschen keine Auswirkungen auf den Stream. Es ist keine Aktion erforderlich, und die Replikation wird wie gewohnt fortgesetzt.
Schemaänderungen auf Spaltenebene bearbeiten
Erfahren Sie mehr über die Verarbeitung von Schemaänderungen auf Spaltenebene, wie das Hinzufügen und Löschen von Spalten in Oracle GoldenGate für YugabyteDB.
Spalte hinzufügen
So führen Sie einen Vorgang ALTER TABLE … ADD COLUMN für eine Tabelle aus, die Teil einer Publikation ist: 1. Stoppen Sie den Extract-Prozess, bevor Sie mit dem Hinzufügen einer Spalte zur Tabelle beginnen. Dadurch wird verhindert, dass Extract abbricht.
-
Fügen Sie die Spalte in der Tabelle, die in der Publikation enthalten ist, mit dem folgenden Befehl hinzu:
ALTER TABLE...ADD COLUMN -
Warten Sie auf die in
cdcsdk_publication_list_refresh_interval_secsangegebene Dauer, um sicherzustellen, dass das CDC-Modul aktualisiert und die neue Spalte erkennt. -
Führen Sie alle DML-Vorgänge (INSERTS, UPDATES oder DELETES) für die neue Spalte aus.
-
Starten Sie den Extract-Prozess neu, und prüfen Sie, ob die Änderungen, einschließlich der DML-Vorgänge für die neue Spalte, erfolgreich erfasst wurden.
Eine Spalte ablegen
So löschen Sie Spalten aus einer Tabelle, die Teil einer Publikation ist: 1. Stoppen Sie den Extraktionsprozess. Obwohl das Löschen einer Spalte in der Regel nicht dazu führt, dass der Extract beendet wird, wird empfohlen, den Extract zu stoppen, bevor Schemaänderungen vorgenommen werden.
-
Führen Sie den folgenden Befehl für die Tabelle aus, die in der Publikation enthalten ist:
ALTER TABLE ... DROP COLUMN -
Warten Sie auf die in
cdcsdk_publication_list_refresh_interval_secsangegebene Dauer, um sicherzustellen, dass das CDC-Modul aktualisiert wird. -
Führen Sie DML-Vorgänge (INSERT, UPDATE, DELETE) nach Bedarf aus.
-
Starten Sie Extract neu, und stellen Sie sicher, dass die DML-Vorgänge für die verbleibenden Spalten weiterhin korrekt erfasst werden.