Automatische Konflikterkennung und -auflösung
Wenn Oracle GoldenGate Änderungen zwischen Oracle-Datenbanken repliziert, können Sie Oracle GoldenGate Automatic Conflict Detection and Resolution in den Oracle-Datenbanken konfigurieren und verwalten. Hinweis: Das Feature "Automatische Konflikterkennung und -lösung" ist ab Oracle Database 12c Release 2 (12.2) verfügbar und kann mit Oracle GoldenGate 12c (12.3.0.1) und späteren Releases verwendet werden. Es gibt ein manuelles Feature zur Konflikterkennung und -auflösung, das als Oracle GoldenGate-Konflikterkennung und -auflösung (CDR) bezeichnet wird. Oracle GoldenGate CDR wird in der Replicat-Parameterdatei konfiguriert. Weitere Informationen zu Oracle GoldenGate CDR finden Sie unter Manuelle Konflikterkennung und -behebung.
Allgemeine Informationen zur automatischen Konflikterkennung und -lösung
Wenn Oracle GoldenGate Änderungen zwischen Oracle-Datenbanken repliziert, können Sie die Oracle GoldenGate-Konflikterkennung und -lösung automatisch in diesen Datenbanken konfigurieren und verwalten.
Dieses Feature ist für die Verwendung mit Aktiv/Aktiv-Konfigurationen vorgesehen, bei denen Oracle GoldenGate die Datensynchronisierung zwischen mehreren Datenbanken aufrechterhalten muss, die dieselben Datasets enthalten.
Hinweis: Automatic Conflict Detection and Resolution-(ACDR-)Feature, das nur verfügbar ist, wenn Oracle GoldenGate mit Oracle AI Database verwendet wird. Für Nicht-Oracle-Datenbanken ist ein manuelles Feature zur Konflikterkennung und -lösung (CDR) in Oracle GoldenGate verfügbar. Oracle GoldenGate CDR wird in der Replicat-Parameterdatei konfiguriert.
Automatische Konflikterkennung und -auflösung
Sie können die automatische Konflikterkennung und -lösung in einer Oracle GoldenGate-Konfiguration konfigurieren, die Tabellen zwischen Oracle-Datenbanken repliziert. Um die automatische Konflikterkennung und -auflösung für eine Tabelle zu konfigurieren, müssen Sie die Prozedur ADD_AUTO_CDR im Package DBMS_GOLDENGATE_ADM aufrufen. Als Voraussetzung für die Einrichtung der automatischen Konflikterkennung und -lösung muss der Oracle GoldenGate-Benutzer über die entsprechenden Berechtigungen verfügen. Weitere Informationen zu Benutzerberechtigungen finden Sie unter Benutzerberechtigungen für Oracle AI Database 26ai and Higher erteilen und Benutzerberechtigungen für Oracle Database 21c and Lower erteilen.
Der Administratorbenutzer muss bei der entsprechenden PDB angemeldet sein, wenn er ADD_AUTO_CDR aufruft. Die folgenden Konstanten, die Bit-Flags darstellen, werden jetzt hinzugefügt:
-
EARLIEST_TIMESTAMP_RESOLUTIONsetztTOMBSTONE KEY VERSIONINGautomatisch -
DELETE_ALWAYS_WINSsetztTOMBSTONE KEY VERSIONINGautomatisch. -
IGNORE_SITE_PRIORITY
Im folgenden Beispiel wird ein ALTER-Befehl für die Tabelle HR.EMPLOYEES verwendet:
BEGIN
dbms_goldengate_adm.alter_auto_cdr
(schema_name => 'HR'
,table_name => 'EMPLOYEES'
,additional_options => DBMS_GOLDENGATE_ADM.ADDITIONAL_OPTIONS_ADD_KEY_VERSION );
END;
/
Siehe die Beschreibung für additional_options in ADD_AUTO_CDR Procedure der Referenz zu Oracle AI Database PL/SQL-Packages und -Typen.
Wenn Oracle GoldenGate Änderungen erfasst, die von einer Oracle AI Database stammen, wird jede Änderung in einem LCR (Row Logical Change Record) gekapselt. Ein Zeilen-LCR ist eine strukturierte Darstellung einer DML-Zeilenänderung. Jeder Zeilen-LCR enthält den Vorgangstyp, alte Spaltenwerte und neue Spaltenwerte. LCRs mit mehreren Zeilen können Teil einer einzelnen Datenbanktransaktion sein.
Wenn mehrere Replikate einer Tabelle Änderungen an der Tabelle zulassen, kann ein Konflikt auftreten, wenn eine Änderung an derselben Zeile in zwei verschiedenen Datenbanken fast gleichzeitig vorgenommen wird. Oracle GoldenGate repliziert Änderungen mit den Zeilen-LCRs. Es erkennt einen Konflikt, indem die alten Werte im Zeilen-LCR für die anfängliche Änderung aus der Ursprungsdatenbank mit den aktuellen Werten der entsprechenden Tabellenzeile in der Zieldatenbank verglichen werden, die durch die Schlüsselspalten identifiziert werden. Wenn ein Spaltenwert nicht übereinstimmt, tritt ein Konflikt auf.
Nachdem ein Konflikt erkannt wurde, kann Oracle GoldenGate den Konflikt lösen, indem Werte in der Zeile mit einigen Werten aus dem Zeilen-LCR überschrieben, die Werte im Zeilen-LCR ignoriert oder ein Delta berechnet wird, um die Zeilenwerte zu aktualisieren.
Die automatische Konflikterkennung und -auflösung erfordert aus folgenden Gründen keine Anwendungsänderungen:
-
Oracle AI Database erstellt und verwaltet automatisch unsichtbare Zeitstempelspalten.
-
Einfügungen, Aktualisierungen und Löschvorgänge verwenden die tombstone-Logtabelle zum Löschen, um zu bestimmen, ob eine Zeile gelöscht wurde.
-
LOB-Spaltenkonflikte können ermittelt werden.
-
Oracle AI Database konfiguriert automatisch zusätzliches Logging für erforderliche Spalten.
Tipp:
Informationen zum zusätzlichen Logging finden Sie auch unter Oracle AI Database Utilities.
Anforderungen für automatische Konflikterkennung und -lösung
Die folgenden Hauptanforderungen gelten für die Konfiguration von Automatic CDR in Oracle GoldenGate:
-
Ein zusätzliches Logging ist erforderlich, um sicherzustellen, dass jeder Zeilen-LCR über die Informationen verfügt, die zum Erkennen und Beheben eines Konflikts erforderlich sind. Beim zusätzlichen Logging werden zusätzliche Informationen in das Redo Log für die Spalten einer Tabelle eingefügt, wenn ein DML-Vorgang für die Tabelle ausgeführt wird. Wenn Sie eine Tabelle für die Oracle GoldenGate-Konflikterkennung und -auflösung konfigurieren, wird das zusätzliche Logging automatisch für alle Spalten in der Tabelle konfiguriert. Die zusätzlichen Informationen im Redo Log werden in einem LCR platziert, wenn eine Tabellenänderung repliziert wird.
Extract muss für die Erfassung verwendet werden. Integriertes Replicat oder paralleles Replicat im integrierten Modus muss auf der Anwendungsseite verwendet werden.
LOGALLSUPCOLSsollte der Standardwert bleiben. -
Es gibt ein ausgeblendetes Feld
KEYVER$$des Typs "Zeitstempel", das der TabelleDELETE TOMBSTONEoptional hinzugefügt wird. Dieses Feld ist für die Auflösung vonEARLIEST TIMESTAMP,DELETE ALWAYS WINSundSITE PRIORITYerforderlich und ist auch in der Basistabelle vorhanden. Das Vorhandensein des Feldes in der Basistabelle muss in den Metadaten der Traildatei als Flag oder Token angegeben werden.Primärschlüsselaktualisierungen werden auch in der Tabelle
DELETE TOMBSTONEunterstützt. Ein Eintrag wird in die TabelleDELETE TOMBSTONEfür die Zeile mit dem ursprünglichen Schlüsselwert (vor dem Image) eingefügt. Die Logik im Extract, die INSERTS in der TabelleDELETE TOMBSTONEmit DELETES übereinstimmt, muss auch mit PK-Aktualisierungen oder dem eindeutigen Schlüssel (UK) mit mindestens einem Feld abgeglichen werden, das nicht null sein kann, wenn kein Primärschlüssel vorhanden ist. -
SITE PRIORITYbenötigt Unterstützung vom Replicat, bevor die Parameter implementiert werden und die Einstellung an das Replicat übergeben wird. -
Die automatische CDR funktioniert nicht mit anderen Ausnahmen und Fehlerbehandlungskonfigurationen auf
MAP-Ebene, wieREPERROR,MAPEXCEPTION. Sie können entweder Automatic CDR oderREPERROR/MAPEXCEPTIONverwenden, jedoch nicht beide in derselben Tabelle. Weitere Informationen finden Sie unterTABLE \| MAPundREPERROR.
Kompatibilität und Migration
Wenn die Basistabelle in der Quelldatenbank die Spalte KEYVER$$ nicht enthält, die Zielbasistabelle jedoch enthält, führt DELETE und Primary Key Updates zu einem Fehler in der Zieldatenbank für die Auflösung von EARLIEST TIMESTAMP, DELETE ALWAYS WINS und SITE PRIORITY.
Beim Replizieren aus einer Basistabelle, die eine KEYVER$$ in eine Zieltabelle enthält, wird die Spalte KEYVER$$ ignoriert.
Spaltengruppen
Eine Spaltengruppe ist eine logische Gruppierung einer oder mehrerer Spalten in einer replizierten Tabelle. Wenn Sie eine Spaltengruppe hinzufügen, wird die Konflikterkennung und -auflösung für die Spalten in der Spaltengruppe getrennt von den anderen Spalten in der Tabelle ausgeführt.
Wenn Sie eine Tabelle für die Oracle GoldenGate-Konflikterkennung und -auflösung mit der Prozedur ADD_AUTO_CDR konfigurieren, werden alle skalaren Spalten in der Tabelle einer Standardspaltengruppe hinzugefügt. Um andere Spaltengruppen für die Tabelle zu definieren, führen Sie die Prozedur ADD_AUTO_CDR_COLUMN_GROUP aus. Alle Spalten in der Tabelle, die nicht Teil einer benutzerdefinierten Spaltengruppe sind, bleiben in der Standardspaltengruppe für die Tabelle.
Spaltengruppen ermöglichen es verschiedenen Datenbanken, verschiedene Spalten in derselben Zeile nahezu gleichzeitig zu aktualisieren, ohne einen Konflikt zu verursachen. Wenn Spaltengruppen für eine Tabelle konfiguriert werden, können Konflikte vermieden werden, selbst wenn verschiedene Datenbanken dieselbe Zeile in der Tabelle aktualisieren. Ein Konflikt wird nicht erkannt, wenn die Aktualisierungen die Werte von Spalten in verschiedenen Spaltengruppen ändern.
Abbildung 1: Spaltengruppen

Dieses Beispiel zeigt eine Zeile, die in Datenbank A und Datenbank B repliziert wird. Die folgenden beiden Spaltengruppen sind für die replizierte Tabelle in jeder Datenbank konfiguriert:
-
Eine Spaltengruppe enthält die Spalte
Office. Die unsichtbare Zeitstempelspalte für diese Spaltengruppe istTS1. -
Eine weitere Spaltengruppe enthält die Spalten
TitleundSalary. Die unsichtbare Zeitstempelspalte für diese Spaltengruppe istTS2.
Mit diesen Spaltengruppen können Datenbank A und Datenbank B dieselbe Zeile nahezu zur gleichen Zeit aktualisieren, ohne einen Konflikt zu verursachen. Insbesondere werden folgende Änderungen vorgenommen:
-
Bei Datenbank A wurde der Wert von
Officevon1080in1030geändert. -
In Datenbank B wurde der Wert von
TitlevonMTS1inMTS2geändert.
Da sich die Spalten Office und Title in verschiedenen Spaltengruppen befinden, werden die Änderungen repliziert, ohne dass ein Konflikt erkannt wird. Das Ergebnis ist, dass die Werte in der Zeile in beiden Datenbanken identisch sind, nachdem jede Änderung repliziert wurde.
Stückweise LOB-Aktualisierungen
Eine Gruppe von LOB-Vorgängen, die aus LOB WRITE, LOB ERASE und LOB TRIM bestehen, ist ein stückweises LOB-Update. Wenn eine Tabelle, die LOB-Spalten enthält, für die Konflikterkennung und -auflösung konfiguriert ist, wird jede LOB-Spalte in einer eigenen Spaltengruppe platziert, und die Spaltengruppe verfügt über eine eigene ausgeblendete Zeitstempelspalte. Die Zeitstempelspalte wird beim ersten stückweisen LOB-Vorgang aktualisiert.
Für eine LOB-Spalte wird ein Konflikt wie folgt ermittelt und aufgelöst:
-
Wenn der Zeitstempel für die Spaltengruppe des LOB nach der entsprechenden LOB-Spaltengruppe in der Zeile liegt, wird die stückweise LOB-Aktualisierung angewendet.
-
Wenn der Zeitstempel für die Spaltengruppe des LOB vor der entsprechenden LOB-Spaltengruppe in der Zeile liegt, wird das LOB in der Tabellenzeile beibehalten.
-
Wenn die Zeile nicht in der Tabelle vorhanden ist, wird ein Fehler ausgelöst.
Früheste Konflikterkennung und -lösung mit Zeitstempel
Spalten mit Namen im Format CDRTS$ column group und CDRTS$ROW werden verwendet, um Zeitstempel zu enthalten, die Änderungszeiten für Spaltengruppen und die Zeile widerspiegeln.
Hinweis: Tabellen mit dem Symbol $ oder $$ sind interne oder ausgeblendete Tabellen.
Die DBMS_GOLDENGATE_ADM umfasst die folgenden Verfahren zum Konfigurieren der frühesten und neuesten Zeitstempelauflösung:
-
ADD_AUTO_CDR() -
ADD_AUTO_CDR_COLUMN_GROUP() -
REMOVE_AUTO_CDR() -
REMOVE_AUTO_CDR_COLUMN_GROUP() -
ALTER_AUTO_CDR() -
ALTER_AUTO_CDR_COLUMN_GROUP()
Das Feld ADDITIONAL_OPTIONS in ADD_AUTO_CDR() und ALTER_AUTO_CDR() aktiviert die Verwendung des frühesten Zeitstempels. Wenn Sie den frühesten Zeitstempel aktivieren, wird die Versionierung automatisch aktiviert. Dadurch wird die neue ausgeblendete Spalte KEYVER$$ (Versionsnummer) des Typs "Zeitstempel" hinzugefügt. Ein neuer Flag-Wert wird hinzugefügt, um die früheste Zeitstempelverwendung anzugeben. Dieses Feld wird auch der Tabelle DELETE TOMBSTONE hinzugefügt. Löschkonflikte sind der Grund für die erforderliche Versionsnummer. Bei einer frühesten Zeitstempelauflösung können Löschkonflikte, die transparent sein können, nicht nur falsch erfolgreich sein, sie können neue Einfügungen der Zeile (neue Versionen) verhindern. Mit einem Versionszeitstempel kann der Löschvorgang für eine Zeilen-DML für dieselbe Zeilenversion korrekt aufgelöst werden.
Das ursprüngliche Einfügen der Zeile erhält den aktuellen Zeitstempel vom Standardwert. Beim Löschen dieser Zeile werden dann die Versionsnummer und die Zeit, zu der diese Zeile eingefügt wurde, in die Tombstone-Tabelle eingefügt, wenn ein Löschvorgang durchgeführt wird. Bei einem neuen Insert erhält die Versionsnummer standardmäßig erneut den aktuellen Zeitstempel, wodurch ein falscher Konflikt mit den aktuellen Löscheinträgen in der Tombstone-Tabelle vermieden wird.
Beispiel
Angenommen, Sie haben eine Tabelle tab1, die zwischen Datenbanken auf Site 1 und Site 2 global konsistent ist.
Die Tabelle enthält einen (primären) Schlüssel. ACDR verwaltet automatisch eine Schlüsselversion (kv) und einen Zeitstempel (ts) als Spalten für die Basistabelle (ausgeblendet) und die Tombstone-Tabelle. Für Schlüsselversion kv und Zeitstempel ts
Datenbank 1: insert tab1 key1 kv1 ts1
Datenbank 2: delete tab1 key1 kv1 ts1
Einfügen in DELETE TOMBSTONE-Tabelle key1 kv1 ts1
Datenbank 1: insert tab1 key1 kv2 ts2
Ohne Verwendung der Schlüsselversion würde die Einfügung ignoriert, der Löschzeitstempel liegt vor. Wenn die Schlüsselversion verwendet wird, wissen Sie, dass kv2 nicht die Version der Zeile ist, die gelöscht wurde, und das Einfügen erfolgreich ist.
Konflikterkennung und -lösung mit letztem Zeitstempel
Wenn Sie die Prozedur ADD_AUTO_CDR im Package DBMS_GOLDENGATE_ADM ausführen, um eine Tabelle für die automatische Oracle GoldenGate-Konflikterkennung und -auflösung zu konfigurieren, wird der Tabelle eine ausgeblendete Zeitstempelspalte hinzugefügt. Diese ausgeblendete Zeitstempelspalte zeichnet den Zeitpunkt einer Zeilenänderung auf. Diese Informationen werden verwendet, um Konflikte zu erkennen und zu lösen.
Wenn ein Zeilen-LCR angewendet wird, kann ein Konflikt für einen INSERT-, UPDATE- oder DELETE-Vorgang auftreten. In der folgenden Tabelle werden die einzelnen Konflikttypen und deren Lösung beschrieben.
| Arbeitsvorgang | Konflikterkennung | Konfliktauflösung |
|---|---|---|
INSERT |
Ein Konflikt wird erkannt, wenn die Tabelle denselben Wert für eine Schlüsselspalte wie der neue Wert im Zeilen-LCR aufweist. | Wenn der Zeitstempel des Zeilen-LCR nach dem Zeitstempel in der Tabellenzeile liegt, ersetzen die Werte im Zeilen-LCR die Werte in der Tabelle. Wenn der Zeitstempel des Zeilen-LCR vor dem Zeitstempel in der Tabellenzeile liegt, wird der Zeilen-LCR verworfen, und die Tabellenwerte werden beibehalten. |
UPDATE |
In jedem der folgenden Fälle wird ein Konflikt erkannt:
|
Wenn ein Wert nicht übereinstimmt und der Zeitstempel des Zeilen-LCR nach dem Zeitstempel in der Tabellenzeile liegt, ersetzen die Werte im Zeilen-LCR die Werte in der Tabelle. Wenn eine Wertunstimmigkeit vorliegt und der Zeitstempel des Zeilen-LCR vor dem Zeitstempel in der Tabellenzeile liegt, wird der Zeilen-LCR verworfen, und die Tabellenwerte werden beibehalten. Wenn die Tabellenzeile nicht vorhanden ist und der Zeitstempel des Zeilen-LCR nach dem Zeitstempel in der Tombstone-Tabellenzeile liegt, wird der Zeilen-LCR von einem Wenn die Tabellenzeile nicht vorhanden ist und der Zeitstempel des Zeilen-LCR vor dem Zeitstempel in der Tombstone-Tabellenzeile liegt, wird der Zeilen-LCR verworfen. Wenn die Tabellenzeile nicht vorhanden ist und keine entsprechende Zeile in der Tombstone-Tabelle vorhanden ist, wird der Zeilen-LCR von einem |
DELETE |
In jedem der folgenden Fälle wird ein Konflikt erkannt:
|
Wenn der Zeitstempel des Zeilen-LCR nach dem Zeitstempel in der Tabelle liegt, löschen Sie die Zeile aus der Tabelle. Wenn der Zeitstempel des Zeilen-LCR vor dem Zeitstempel in der Tabelle liegt, wird der Zeilen-LCR verworfen, und die Tabellenwerte werden beibehalten. Wenn der Löschvorgang erfolgreich war, protokollieren Sie den Zeilen-LCR, indem Sie ihn in die Tombstone-Tabelle einfügen. Wenn die Tabellenzeile nicht vorhanden ist, protokollieren Sie den Zeilen-LCR, indem Sie ihn in die Tombstone-Tabelle einfügen. |
Die folgende Abbildung zeigt die Konfliktauflösung zwischen Datenbank A und Datenbank B: 
Dieses Beispiel zeigt eine Zeile, die in Datenbank A und Datenbank B repliziert wird. Die Datenbankspalten sind Name, RowTS, Office, Title und Salary. Die Spalte RowTS ist die unsichtbare Spalte in beiden Datenbanken. Die Spalte Office in Datenbank A enthält ein Update, und gleichzeitig wird die Spalte Title in Datenbank B aktualisiert. Dies führt zu einem Konflikt, und die Lösung für diesen Konflikt wird mit der neuesten Zeitstempelmethode durchgeführt.
-
In Datenbank A wird der Wert in der Spalte
Officevon 1080 in 1103 aktualisiert, und der Wert RowTS wird von @TS10 in @TS20 geändert. Ein Pfeil gibt an, dass diese Änderung in Datenbank B repliziert wird. -
In Datenbank B ändert sich der Wert der Spalte
Titlevon MTS1 in MTS2, und der Wert RowTS ändert sich von @TS10 in @TS22. -
Um diesen Konflikt zu lösen, gewinnt der letzte in Datenbank B vorhandene Zeitstempel. Dies bedeutet, dass die Änderungen in Datenbank A nicht angewendet werden. Die endgültigen Werte für Datenbank A und Datenbank B sind Scott, @TS22, 1080, MTS2, 100.
Delta-Konfliktlösung
Bei der Delta-Konflikterkennung tritt ein Konflikt auf, wenn sich ein Wert in der alten Spaltenliste des Zeilen-LCR vom Wert für die entsprechende Zeile in der Tabelle unterscheidet.
Um die Erkennung und Auflösung von Delta-Konflikten für eine Tabelle zu konfigurieren, führen Sie die Prozedur ADD_AUTO_CDR_DELTA_RES im Package DBMS_GOLDENGATE_ADM aus. Die Delta-Auflösungsmethode hängt nicht von einem Zeitstempel oder einer Spalte mit zusätzlicher Auflösung ab. Bei der Lösung von Delta-Konflikten wird der Konflikt gelöst, indem die Differenz zwischen dem neuen und dem alten Wert im Zeilen-LCR zum Wert in der Tabelle hinzugefügt wird. Diese Auflösungsmethode wird im Allgemeinen für Finanzdaten wie einen Kontensaldo verwendet. Beispiel: Wenn ein Banksaldo an zwei Standorten gleichzeitig aktualisiert wird, wird der konvergierte Wert für alle Soll- und Habenbeträge berücksichtigt.
Die folgende Abbildung zeigt ein Beispiel für die Erkennung und Auflösung von Delta-Konflikten.
Abbildung 2: Delta-Konflikterkennung und -auflösung

Dieses Beispiel zeigt eine Zeile, die in Datenbank A und Datenbank B repliziert wird. Die Spalte Balance wird als Spalte angegeben, in der die Delta-Konfliktauflösung ausgeführt wird. Die Spalte RowTS ist die unsichtbare Zeitstempelspalte, um die Uhrzeit jeder Änderung in der Spalte Balance zu verfolgen. In beiden Datenbanken wird der Wert Balance nahezu gleichzeitig in der Zeile geändert (@T20 in Datenbank A und @T22 in Datenbank B). Diese Änderungen führen zu einem Konflikt, und die Lösung von Delta-Konflikten wird verwendet, um den Konflikt wie folgt zu lösen:
-
Bei Datenbank A wurde der Wert von
Balancevon1000in1750geändert. Daher wurde der Wert um 750 erhöht. -
In Datenbank B wurde der Wert von
Balancevon1000in950geändert. Daher wurde der Wert um 50 verringert. -
Um den Konflikt in Datenbank A zu lösen, wird der Wert der Differenz zwischen den neuen und alten Werten im Zeilen-LCR auf den Wert in der Tabelle gesetzt. Die Differenz zwischen den neuen und alten Werten im LCR beträgt (1000+750-50=1700). Der aktuelle Wert in der Tabelle wird um 700 erhöht, sodass der Wert nach der Konfliktlösung 1700 ist.
-
Um den Konflikt in Datenbank B zu lösen, wird der Wert der Differenz zwischen den neuen und alten Werten im Zeilen-LCR auf den Wert in der Tabelle gesetzt. Die Differenz zwischen den neuen und alten Werten im LCR beträgt 750 (1000 - 50 + 750) = 1700. Daher wird der aktuelle Wert in der Tabelle (950) um 750 erhöht, so dass der Wert nach der Konfliktlösung 1700 ist.
Nach der Auflösung des Delta-Konflikts ist der Wert der Spalte Balance für die Zeile in Datenbank A und Datenbank B identisch.
CDR für Standortpriorität
Hinweis: Die Auflösung von SITE PRIORITY hat Vorrang vor allen COLUMN GROUP-Auflösungseinstellungen.
Hinweis: Wenn der Replicat-Parameter SITE PRIORITY nicht vor den entsprechenden Zuordnungsanweisungen in der Parameterdatei platziert wird, funktioniert er nicht. Dieser Parameter muss vor den entsprechenden Map-Anweisungen platziert werden.
Die Prioritätsauflösung wird in der Replicat-Parameterdatei zwischen Quelle und Ziel zur Konfliktauflösung angegeben.
SITE PRIORITY ist für eine Datenbank oder PDB in der Replicat-Parameterdatei mit dem Parameter ACDR SITE_PRIORITY {source_db_name}{OVERWRITE | IGNORE } aktiviert, der angegeben wird, um die SITE PRIORITY-Auflösung für eine Tabelle zu aktivieren.
Wenn die Option OVERWRITE angegeben ist, hat die Quelltabelle Priorität, und Konflikte werden durch OVERWRITE aufgelöst. Wenn hingegen die Option IGNORE angegeben ist, hat die Zieltabelle Priorität, und die Änderungen der Quelltabelle werden in einem Konflikt ignoriert.
Die Auflösung von SITE PRIORITY kann durch das Feld ADDITIONAL_OPTIONS in der Prozedur ADD_AUTO_CDR() im DBMS_GOLDENGATE_ADM-Package und ALTER_AUTO_CDR() durch Festlegen von IGNORE_SITE_PRIORITY deaktiviert werden.
Jede Replicat-Quell-Ziel-Beziehung kann unterschiedlich eingerichtet werden. Daher hängt die Konvergenz vom Benutzer-Setup ab.
CDR mit Zeitstempel "Immer gewinnt" löschen
DELETE ALWAYS WINS wird über das Feld ADDITIONAL_OPTIONS in den DBMS_GOLDENGATE_ADM-Prozeduren ADD_AUTO_CDR() und ALTER_AUTO_CDR() aktiviert. Dies ist erneut eine Methode zur Auflösung von Löschkonflikten, bei der die neueste Zeitstempelauflösung nicht verwendet wird. Daher ist eine Versionierung erforderlich. Wenn Sie DELETE ALWAYS WINS aktivieren, wird die Versionierung automatisch aktiviert. Dadurch wird die neue ausgeblendete Spalte KEYVER$$ (Versionsnummer) des Typs "Zeitstempel" hinzugefügt. Ein neuer Flag-Wert wird auch zu acdrflags_kqldtvc hinzugefügt, um die Verwendung von DELETE ALWAYS WINS anzugeben. Dieses Feld wird auch der Tabelle DELETE TOMBSTONE hinzugefügt. Es gibt dieselben Versionierungsprobleme wie bei der Lösung EARLIEST TIMESTAMP.
Beispiel:
Schlüsselversion kv und Zeitstempel ts
Datenbank 1: insert tab1 key1 kv1 ts1
Datenbank 2: delete tab1 key1 kv1 ts1
Einfügen in Tabelle DELETE TOMBSTONE key1 kv1 ts1
Datenbank 1: insert tab1 key1 kv2 ts2
Ohne die Schlüsselversion würde das Einfügen ignoriert, das Löschen gewinnt immer. Wenn die Schlüsselversion verwendet wird, wissen Sie, dass kv2 nicht die Version der Zeile ist, die gelöscht wurde, und das Einfügen erfolgreich ist.
TOMBSTONE-Tabelle löschen
Die Tabelle DELETE TOMBSTONE ist ein Marker für einen gelöschten Datensatz, um ihn von einem Datensatz zu unterscheiden, der nie vorhanden war. Eine Tabelle DELETE TOMBSTONE enthält mindestens die Schlüsselspalten und den Vorgangszeitstempel. Diese Informationen sind für die Löschkonvergenz erforderlich, da einige eingehende Aktualisierungen und Einfügungen von einem anderen Standort verzögert werden können und der eingehende LCR anhand des Tombstone-Vorgangszeitstempels gefiltert werden muss, um zu bestimmen, ob er angewendet werden soll.
Primärschlüsselaktualisierungen in Delete Tombstone verfolgen
Bei der vollständigen Unterstützung von Primärschlüsselaktualisierungen (PK) müssen Konflikte sowohl für die Zeilen, die durch das Before Image des Schlüssels dargestellt werden, als auch für die Zeile, die durch das After Image des Schlüssels dargestellt wird, behandelt werden. Ein PK-Update ist ein autonomes Löschen und Einfügen. Daher müssen die PK-Aktualisierungskonflikte als Löschen unterstützt werden, wenn Konflikte mit dem Before Image des Schlüssels auftreten und mit dem After Image des Schlüssels (und der Zeile) eingefügt werden.
Die Unterstützung der PK-Aktualisierung als Löschen der Zeile, die durch das Before Image des Schlüssels dargestellt wird, bedeutet, dass sie als Löschvorgang in die Tombstone-Tabelle eingefügt werden sollte. Ein interner Update-Trigger wird hinzugefügt, um ihn in die Tombstone-Tabelle einzufügen, wenn der Primärschlüssel aktualisiert wird (eigentlich der Zeilenkennungsschlüssel, entweder der PK, wenn er vorhanden ist, oder das ausgewählte Vereinigte Königreich mit mindestens einer Spalte, die nicht auf Null gesetzt werden kann). Da eine PK-Aktualisierung zu zwei Konflikten führen kann, werden bis zu zwei Auflösungen auf Zeilenebene versucht, die Zeile mit dem ursprünglichen PK und das Einfügen der Zeile mit dem neuen PK zu löschen.
Beispiel: Verwenden der neuesten Zeitstempelauflösung
Datenbank 1: Update auf tab1 key1 at ts1
Datenbank 2: Update auf tab1 key1 set key1 to key2 ts2
Datenbank 3: Update auf tab1 key2 ts3
In diesem Szenario scheint es, dass auf Zeilenebene die Zeile tab1 mit key1 gelöscht werden muss und die Aktualisierung der Datenbank 3 die letzte Änderung des Zeilenschlüssels tab1 sein muss
- Wenn sich die Datenbank 2 stattdessen unter
ts3und die Datenbank 3 unterts3befindet, ist die PK-Aktualisierung in Datenbank 2 die endgültige Änderung dertab1-Zeilekey2.
Betrachten Sie nun einen Fall, in dem die Datenbank 1 bei ts3, die Datenbank 2 bei ts2 und die Datenbank 3 bei ts1 war. Dann sollte die Aktualisierung auf die tab1-Zeile key1 in Datenbank 1 erfolgreich sein, und die PK-Aktualisierung von Datenbank 2 in tab1-Zeile key2 sollte erfolgreich sein. An dieser Stelle sieht es so aus, als ob die vollständige Auflösung darin besteht, dass sowohl das Löschen am Vorbild als auch das Einfügen am Nachbild separat aufgelöst werden muss. Dies bedeutet, dass sie nicht voneinander abhängig sind und ein Verlust für einen, ist kein Verlust für beide.
Konfiguration von Delta-Konflikterkennung und -lösung
Die Prozedur ADD_AUTO_CDR_DELTA_RES im Package DBMS_GOLDENGATE_ADM konfiguriert die Erkennung und Auflösung von Delta-Konflikten.
Bei der Auflösung von Delta-Konflikten geben Sie eine Spalte an, für die Konflikte ermittelt und aufgelöst werden. Der Konflikt wird ermittelt, wenn der Wert der Spalte im Zeilen-LCR nicht mit dem entsprechenden Wert in der Tabelle übereinstimmt. Der Konflikt wird gelöst, indem die Differenz zwischen den neuen und alten Werten im Zeilen-LCR zum Wert in der Tabelle hinzugefügt wird.
Sie können einen Oracle GoldenGate-Administrator mit der Prozedur GRANT_ADMIN_PRIVILEGE im Package DBMS_GOLDENGATE_ADM konfigurieren.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
ADD_AUTO_CDRaus, und geben Sie die Tabelle an, die für die Erkennung und Auflösung des aktuellen Zeitstempelkonflikts konfiguriert werden soll. -
Führen Sie die Prozedur
ADD_AUTO_CDR_DELTA_RESaus, und geben Sie die Spalte an, in der die Delta-Konflikterkennung und -auflösung ausgeführt wird. -
Wiederholen Sie die vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-23: Delta-Konflikterkennung und -auflösung für eine Tabelle konfigurieren
In diesem Beispiel wird die Delta-Konflikterkennung und -auflösung für die Spalte order_total in der Tabelle oe.orders konfiguriert.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
/
Konfigurieren der Erkennung und Lösung von Konflikten mit dem letzten Zeitstempel
Die Prozedur ADD_AUTO_CDR im Package DBMS_GOLDENGATE_ADM konfiguriert die neueste Erkennung und Lösung von Zeitstempelkonflikten. Die Prozedur ADD_AUTO_CDR_COLUMN_GROUP fügt optionale Spaltengruppen hinzu.
Für Oracle AI Database 26ai und höher gibt es zusätzliche Methoden zum Verwalten und Verwalten von ACDR-konfigurierten Tabellen. Sie können die zugrunde liegenden AUTO-CDR-bezogenen Spalten als UNUSED-Spalten beibehalten oder direkt nach dem Aufruf der Prozedur REMOVE_AUTO_CDR löschen.
Wenn Sie die Prozedur ADD_AUTO_CDR auf eine Tabelle anwenden, werden die internen Spalten standardmäßig als nicht verwendet markiert, wenn AUTO_CDR entfernt wird. Nach dem Aufrufen von REMOVE_AUTO_CDR können die nicht verwendeten Spalten zu einem späteren Zeitpunkt manuell gelöscht oder mit einigen zusätzlichen Parametern sofort entfernt werden. Weitere Informationen finden Sie unter Konflikterkennung und -lösung aus einer Tabelle entfernen.
Weitere Informationen finden Sie unter ADD_AUTO_CDR Procedure in der Oracle AI Database PL/SQL-Packages and Types-Referenz
Bei der Erkennung und Auflösung des letzten Zeitstempelkonflikts wird ein Konflikt erkannt, wenn die Zeitstempelspalte des Zeilen-LCR nicht mit dem Zeitstempel der entsprechenden Tabellenzeile übereinstimmt. Der Zeilen-LCR wird angewendet, wenn sein Zeitstempel später ist. Andernfalls wird der Zeilen-LCR verworfen, und die Tabellenzeile wird nicht geändert. Wenn Sie die Prozedur ADD_AUTO_CDR ausführen, fügt sie eine unsichtbare Zeitstempelspalte für jede Zeile in der angegebenen Tabelle hinzu und konfiguriert die Erkennung und Auflösung von Zeitstempelkonflikten. Wenn Sie die Prozedur ADD_AUTO_CDR_COLUMN_GROUP verwenden, um eine oder mehrere Spaltengruppen hinzuzufügen, fügt sie einen Zeitstempel für die Spaltengruppe hinzu und konfiguriert die Erkennung und Auflösung von Zeitstempelkonflikten für die Spaltengruppe.
Sie können einen Oracle GoldenGate-Administrator mit der Prozedur GRANT_ADMIN_PRIVILEGE im Package DBMS_GOLDENGATE_ADM konfigurieren.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
ADD_AUTO_CDRaus, und geben Sie die Tabelle an, die für die Erkennung und Auflösung des aktuellen Zeitstempelkonflikts konfiguriert werden soll. -
Führen Sie die Prozedur
ADD_AUTO_CDR_COLUMN_GROUPaus, und geben Sie eine oder mehrere Spaltengruppen in der Tabelle an. -
Wiederholen Sie die vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-24 Konfigurieren der neuesten Zeitstempelkonflikterkennung und -auflösung für eine Tabelle
In diesem Beispiel wird die neueste Zeitstempelkonflikterkennung und -auflösung für die Tabelle hr.employees konfiguriert.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES');
END;
/
Beispiel 9-25: Spaltengruppen konfigurieren
In diesem Beispiel werden die folgenden Spaltengruppen für die Zeitstempelkonfliktauflösung in der Tabelle HR.EMPLOYEES konfiguriert:
-
Die Spaltengruppe
JOB_IDENTIFIER_CGenthält die SpaltenJOB_ID,DEPARTMENT_IDundMANAGER_ID. -
Die Spaltengruppe
COMPENSATION_CGenthält die SpaltenSALARYundCOMMISSION_PCT.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_LIST => 'JOB_ID, DEPARTMENT_ID, MANAGER_ID',
COLUMN_GROUP_NAME => 'JOB_IDENTIFIER_CG');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_LIST => 'SALARY, COMMISSION_PCT',
COLUMN_GROUP_NAME => 'COMPENSATION_CG');
END;
/
Konfiguration von Delta-Konflikterkennung und -lösung
Die Prozedur ADD_AUTO_CDR_DELTA_RES im Package DBMS_GOLDENGATE_ADM konfiguriert die Erkennung und Auflösung von Delta-Konflikten.
Bei der Auflösung von Delta-Konflikten geben Sie eine Spalte an, für die Konflikte ermittelt und aufgelöst werden. Der Konflikt wird ermittelt, wenn der Wert der Spalte im Zeilen-LCR nicht mit dem entsprechenden Wert in der Tabelle übereinstimmt. Der Konflikt wird gelöst, indem die Differenz zwischen den neuen und alten Werten im Zeilen-LCR zum Wert in der Tabelle hinzugefügt wird.
Sie können einen Oracle GoldenGate-Administrator mit der Prozedur GRANT_ADMIN_PRIVILEGE im Package DBMS_GOLDENGATE_ADM konfigurieren.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
ADD_AUTO_CDRaus, und geben Sie die Tabelle an, die für die Erkennung und Auflösung des aktuellen Zeitstempelkonflikts konfiguriert werden soll. -
Führen Sie die Prozedur
ADD_AUTO_CDR_DELTA_RESaus, und geben Sie die Spalte an, in der die Delta-Konflikterkennung und -auflösung ausgeführt wird. -
Wiederholen Sie die vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-26: Delta-Konflikterkennung und -auflösung für eine Tabelle konfigurieren
In diesem Beispiel wird die Delta-Konflikterkennung und -auflösung für die Spalte order_total in der Tabelle oe.orders konfiguriert.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
/
Automatische Konflikterkennung und -auflösung verwalten
Sie können die automatische Konflikterkennung und -lösung von Oracle GoldenGate in Oracle AI Database mit dem Package DBMS_GOLDENGATE_ADM verwalten.
Konflikterkennung und -lösung für eine Tabelle ändern
Die Prozedur ALTER_AUTO_CDR im Package DBMS_GOLDENGATE_ADM ändert die Konflikterkennung und -auflösung für eine Tabelle.
Die automatische Konflikterkennung und -auflösung von Oracle GoldenGate muss für die Tabelle konfiguriert werden:
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
ALTER_AUTO_CDRaus, und geben Sie die Tabelle an, die für die Erkennung und Auflösung des aktuellen Zeitstempelkonflikts konfiguriert werden soll. -
Wiederholen Sie alle vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-27: Ändern der Konflikterkennung und -auflösung für eine Tabelle
In diesem Beispiel wird die Konflikterkennung und -auflösung für die Tabelle HR.EMPLOYEES geändert, um anzugeben, dass Löschkonflikte in einer Tombstone-Tabelle verfolgt werden.
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
TOMBSTONE_DELETES => TRUE);
END;
/
Spaltengruppen ändern
Die Prozedur ALTER_AUTO_CDR_COLUMN_GROUP ändert eine Spaltengruppe.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
ALTER_AUTO_CDR_COLUMN_GROUPaus, und geben Sie eine oder mehrere Spaltengruppen in der Tabelle an. -
Wiederholen Sie alle vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-28: Spaltengruppen ändern
In diesem Beispiel wird die Spalte MANAGER_ID aus der Spaltengruppe JOB_IDENTIFIER_CG für die Tabelle HR.EMPLOYEES entfernt.
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_GROUP_NAME => 'JOB_IDENTIFIER_CG',
REMOVE_COLUMN_LIST => 'MANAGER_ID');
END;
/
Hinweis: Wenn mehrere Spalten vorhanden sind, verwenden Sie eine durch Komma getrennte Liste.
Tombstone-Zeilen löschen
Die Prozedur PURGE_TOMBSTONES entfernt Tombstone-Zeilen, die vor einem bestimmten Datum und einer bestimmten Uhrzeit aufgezeichnet wurden. Mit dieser Prozedur werden die Tombstone-Zeilen für alle Tabellen entfernt, die für die Konfliktlösung in der Datenbank konfiguriert sind.
Möglicherweise müssen Grabsteinreihen regelmäßig gelöscht werden, damit das Grabstein-Protokoll im Laufe der Zeit nicht zu groß wird.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
PURGE_TOMBSTONESaus, und geben Sie Datum und Uhrzeit ein.
Beispiel 9-29: Tombstone-Zeilen löschen
In diesem Beispiel werden alle Grabsteinzeilen gelöscht, die am 1. Dezember 2015 vor 3:00 Uhr Eastern Standard Time aufgezeichnet wurden. Der Zeitstempel muss im Format TIMESTAMP WITH TIME ZONE eingegeben werden.
EXEC DBMS_GOLDENGATE_ADM.PURGE_TOMBSTONES('2015-12-01 15:00:00.000000 EST');
Online-Neudefinition auf ACDR-Tabellen
Oracle AI Database ermöglicht eine Minderung der Anwendungsinteraktion, wenn Tabellen oder Spalten mit dem Package DBMS_REDEFINITION neu organisiert werden. Mit dem Package DBMS_REDEFINITION können Sie die folgenden Aufgaben ausführen:
-
Entfernen Sie nicht verwendete Spalten.
-
Reorganisation, Tablespace-Neugestaltung und Partitionierung.
Die DBMS_REDFINITION.START_REDEF_TABLE verwaltet automatisch die ausgeblendete Zeitstempelspalte zur Zwischentabelle.
Einzelheiten zum DBMS_REDFINITION-Package finden Sie unter DBMS_REDEFINITION in der Oracle AI Database PL/SQL-Packages and -Typenreferenz.
Konflikterkennung und -lösung aus einer Tabelle entfernen
Mit Oracle AI Database und höher wirkt sich das vollständige Entfernen von Automatic Conflict Detection and Resolution (ACDR) aus der Tabelle weniger auf die Tabelle aus, da die AUTO_CDR-bezogenen Spalten als UNUSED markiert werden, wenn AUTO_CDR entfernt wird.
Nach dem Aufrufen der Prozedur REMOVE_AUTO_CDR können die nicht verwendeten Spalten manuell in einem Wartungsfenster gelöscht werden. Dies ist nützlich für große Tabellen, bei denen der Vorgang ALTER TABLE ... DROP COLUMN ressourcenintensiv ist.
Wenn Sie alle internen AUTO_CDR-Spalten sofort entfernen möchten, wenn Sie die Prozedur REMOVE_AUTO_CDR aufrufen, müssen Sie die Tabelle zuerst mit dem additional_options-Parameter REMOVE_HIDDEN_COLUMNS für die Prozedur ADD_AUTO_CDR oder ALTER_AUTO_CDR markieren.
Verwenden Sie die Prozedur REMOVE_AUTO_CDR im Package DBMS_GOLDENGATE_ADM, um eine Tabelle als UNUSED zu taggen, wodurch die Blockierung minimiert wird. Sie können eine Spalte löschen oder zu einem späteren Zeitpunkt beibehalten.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
REMOVE_AUTO_CDRaus, und geben Sie die Tabelle an. -
Wiederholen Sie alle vorherigen Schritte in jeder Oracle AI Database-Instanz, in der die Tabelle repliziert wird.
Beispiel 9-30: Entfernen der Konflikterkennung und -auflösung für eine Tabelle
In diesem Beispiel wird die Konflikterkennung und -auflösung für die Tabelle HR.EMPLOYEES entfernt.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES');
END;
/
Sie können Spalten löschen, indem Sie das Flag ADD_AUTO_CDR.REMOVE_HIDDEN_COLUMNS als Parameter additional_flags in der Prozedur ADD_AUTO_CDR verwenden.
Im Folgenden finden Sie ein Beispiel für die Anzeige ausgeblendeter Spalten in einer Tabelle.
Die folgende Abfrage verwendet das Package DBA_UNUSED_COL_TABS, um zu bestimmen, ob nicht verwendete Spalten in der Tabelle EMPLOYEES vorhanden sind.
SELECT OWNER, TABLE_NAME, COUNT
FROM DBA_UNUSED_COL_TABS
WHERE OWNER = 'HR'
AND TABLE_NAME = 'EMPLOYEES'
ORDER BY OWNER, TABLE_NAME;
Die Ausgabe wird wie folgt angezeigt:
OWNER TABLE_NAME COUNT
-------- ------------ ----------
HR EMPLOYEES 1
In der folgenden Abfrage werden die ausgeblendeten Spalten aufgeführt, die vom System getaggt wurden, als ACDR für die Spaltengruppe in der Tabelle EMPLOYEES entfernt wurde.
SELECT OWNER, TABLE_NAME, COLUMN_ID, COLUMN_NAME, DATA_TYPE, HIDDEN_COLUMN
FROM DBA_TAB_COLS
WHERE OWNER = 'HR'
AND TABLE_NAME = 'EMPLOYEES'
AND HIDDEN_COLUMN = 'YES' AND USER_GENERATED= 'NO'
ORDER BY OWNER, TABLE_NAME, COLUMN_ID;
Die Ausgabe wird wie folgt angezeigt:
OWNER TABLE_NAME COLUMN_ID COLUMN_NAME DATA_TYPE HIDDEN_COLUMN
------------ ------------ ---------- ------------- ------------ ---------------
HR EMPLOYEES SYS_C00014_22092220:30:52$ TIMESTAMP(6) YES
Spaltengruppen entfernen
Mit Oracle AI Database 26ai und höher wirkt sich das Entfernen von Automatic Conflict Detection and Resolution (ACDR) aus Spaltengruppen weniger auf die Tabelle aus, da die ACDR-bezogenen Spalten als UNUSED markiert sind. Sie können eine Spalte auch löschen oder zu einem späteren Zeitpunkt beibehalten.
Verwenden Sie die Prozedur REMOVE_AUTO_CDR_COLUMN_GROUP im Package DBMS_GOLDENGATE_ADM, um eine Tabelle zu taggen, wodurch die Blockierung minimiert wird. Siehe das Beispiel unter Konflikterkennung und -lösung aus einer Tabelle entfernen.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
REMOVE_AUTO_CDR_COLUMN_GROUPaus, und geben Sie den Namen der Spaltengruppe an. -
Wiederholen Sie alle vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-31: Spaltengruppen entfernen
In diesem Beispiel wird die Spaltengruppe COMPENSATION_CG aus der Tabelle HR.EMPLOYEES entfernt.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_GROUP_NAME => 'COMPENSATION_CG');
END;
Delta-Konflikterkennung und -lösung entfernen
Die Prozedur REMOVE_AUTO_CDR_DELTA_RES im Package DBMS_GOLDENGATE_ADM entfernt die Erkennung und Auflösung von Delta-Konflikten für eine Spalte.
Delta-Konflikterkennung und -auflösung müssen für die angegebene Spalte konfiguriert werden.
-
Melden Sie sich als Oracle GoldenGate-Administrator bei der eingehenden Serverdatenbank an.
-
Führen Sie die Prozedur
REMOVE_AUTO_CDR_DELTA_RESaus, und geben Sie die Spalte an. -
Wiederholen Sie alle vorherigen Schritte in jeder Oracle AI Database, in der die Tabelle repliziert wird.
Beispiel 9-32: Entfernen der Delta-Konflikterkennung und -auflösung für eine Tabelle
In diesem Beispiel wird die Delta-Konflikterkennung und -auflösung für die Spalte ORDER_TOTAL in der Tabelle OE.ORDERS entfernt.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
Automatische Konflikterkennung und -auflösung überwachen
Sie können die automatische Konflikterkennung und -lösung von Oracle GoldenGate in einer Oracle AI Database überwachen, indem Sie Data Dictionary Views abfragen.
Informationen zu den für Konflikte konfigurierten Tabellen anzeigen
In der Ansicht ALL_GG_AUTO_CDR_TABLES werden Informationen zu den Tabellen angezeigt, die für die automatische Konflikterkennung und -auflösung von Oracle GoldenGate konfiguriert sind.
-
Melden Sie sich bei der Datenbank an.
-
Fragen Sie die Ansicht
ALL_GG_AUTO_CDR_TABLESab.
Beispiel 9-33: Informationen zu den Tabellen anzeigen, die für die Konflikterkennung und -auflösung konfiguriert sind
Diese Abfrage zeigt die folgenden Informationen zu den Tabellen an, die für die Konflikterkennung und -auflösung konfiguriert sind:
-
Der Tabellenbesitzer für jede Tabelle.
-
Der Tabellenname für jede Tabelle.
-
Die Tombstone-Tabelle zum Speichern von Zeilen, die für Konflikte beim Aktualisieren/Löschen gelöscht wurden, wenn eine Tombstone-Tabelle für die Tabelle konfiguriert ist.
-
Die ausgeblendete Zeitstempelspalte, die für die Konfliktauflösung für jede Tabelle verwendet wird.
COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN TOMBSTONE_TABLE FORMAT A15
COLUMN ROW_RESOLUTION_COLUMN FORMAT A25
SELECT TABLE_OWNER,
TABLE_NAME,
TOMBSTONE_TABLE,
ROW_RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_TABLES
ORDER BY TABLE_OWNER, TABLE_NAME;
Die Ausgabe sieht in etwa wie folgt aus:
TABLE_OWNER TABLE_NAME TOMBSTONE_TABLE ROW_RESOLUTION_COLUMN
--------------- --------------- --------------- -------------------------
HR EMPLOYEES DT$_EMPLOYEES CDRTS$ROW
OE ORDERS DT$_ORDERS CDRTS$ROW
Informationen zu Konfliktauflösungsspalten anzeigen
In der Ansicht ALL_GG_AUTO_CDR_COLUMNS werden Informationen zu den Spalten angezeigt, die für die automatische Konflikterkennung und -auflösung von Oracle GoldenGate konfiguriert sind.
Die Spalten können für die automatische Konflikterkennung und -auflösung von Zeilen oder Spalten konfiguriert werden. Die Spalten können für die letzte Zeitstempelkonfliktauflösung in einer Spaltengruppe konfiguriert werden. Darüber hinaus kann eine Spalte für die Auflösung von Delta-Konflikten konfiguriert werden.
-
Stellen Sie als Oracle GoldenGate-Administrator eine Verbindung zur Datenbank her.
-
Fragen Sie die Ansicht
ALL_GG_AUTO_CDR_COLUMNSab.
Beispiel 9-34: Informationen zu Spaltengruppen anzeigen
Diese Abfrage zeigt die folgenden Informationen zu den Tabellen an, die für die Konflikterkennung und -auflösung konfiguriert sind:
-
Der Tabellenbesitzer für jede Tabelle.
-
Der Tabellenname für jede Tabelle.
-
Wenn sich die Spalte in einer Spaltengruppe befindet, wird der Name der Spaltengruppe verwendet.
-
Der Spaltenname.
-
Wenn die Spalte für die Lösung des letzten Zeitstempelkonflikts konfiguriert ist, wird der Name der ausgeblendeten Zeitstempelspalte für die Spalte verwendet.
COLUMN TABLE_OWNER FORMAT A10
COLUMN TABLE_NAME FORMAT A10
COLUMN COLUMN_GROUP_NAME FORMAT A17
COLUMN COLUMN_NAME FORMAT A15
COLUMN RESOLUTION_COLUMN FORMAT A23
SELECT TABLE_OWNER,
TABLE_NAME,
COLUMN_GROUP_NAME,
COLUMN_NAME,
RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_COLUMNS
ORDER BY TABLE_OWNER, TABLE_NAME;
Die Ausgabe sieht in etwa wie folgt aus:
TABLE_OWNE TABLE_NAME COLUMN_GROUP_NAME COLUMN_NAME RESOLUTION_COLUMN
---------- ---------- ----------------- --------------- -----------------------
HR EMPLOYEES COMPENSATION_CG COMMISSION_PCT CDRTS$COMPENSATION_CG
HR EMPLOYEES COMPENSATION_CG SALARY CDRTS$COMPENSATION_CG
HR EMPLOYEES JOB_IDENTIFIER_CG MANAGER_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES JOB_IDENTIFIER_CG JOB_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES JOB_IDENTIFIER_CG DEPARTMENT_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES IMPLICIT_COLUMNS$ PHONE_NUMBER CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ LAST_NAME CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ HIRE_DATE CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ FIRST_NAME CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ EMAIL CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ EMPLOYEE_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_MODE CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_DATE CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ CUSTOMER_ID CDRTS$ROW
OE ORDERS DELTA$ ORDER_TOTAL
OE ORDERS IMPLICIT_COLUMNS$ PROMOTION_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_STATUS CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ SALES_REP_ID CDRTS$ROW
In diesem Beispiel werden die Spalten mit IMPLICIT_COLUMNS$ für den Spaltengruppennamen für die Erkennung und Auflösung von Zeilenkonflikten konfiguriert, sind jedoch nicht Teil einer Spaltengruppe. Die Spalten mit DELTA$ für den Spaltengruppennamen sind für die Delta-Konflikterkennung und -auflösung konfiguriert, und diese Spalten haben keine Auflösungsspalte.
Informationen zu Spaltengruppen anzeigen
In der Ansicht ALL_GG_AUTO_CDR_COLUMN_GROUPS werden Informationen zu den Spaltengruppen angezeigt, die für die automatische Konflikterkennung und -auflösung von Oracle GoldenGate konfiguriert sind.
Sie können die automatische Konflikterkennung und -lösung von Oracle GoldenGate mit der Prozedur ADD_AUTO_CDR im Package DBMS_GOLDENGATE_ADM konfigurieren. Sie können Spaltengruppen mit der Prozedur ADD_AUTO_CDR_COLUMN_GROUP im Package DBMS_GOLDENGATE_ADM konfigurieren.
-
Stellen Sie als Oracle GoldenGate-Administrator eine Verbindung zur Datenbank her.
-
Fragen Sie die Ansicht
ALL_GG_AUTO_CDR_COLUMN_GROUPSab.
Beispiel 9-35: Informationen zu Spaltengruppen anzeigen
Diese Abfrage zeigt die folgenden Informationen zu den Tabellen an, die für die Konflikterkennung und -auflösung konfiguriert sind:
-
Der Tabellenbesitzer.
-
Tabellenname.
-
Der Name der Spaltengruppe.
-
Die ausgeblendete Zeitstempelspalte, die für die Konfliktauflösung für jede Spaltengruppe verwendet wird.
COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN COLUMN_GROUP_NAME FORMAT A20
COLUMN RESOLUTION_COLUMN FORMAT A25
SELECT TABLE_OWNER,
TABLE_NAME,
COLUMN_GROUP_NAME,
RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_COLUMN_GROUPS
ORDER BY TABLE_OWNER, TABLE_NAME;
Die Ausgabe sieht in etwa wie folgt aus:
TABLE_OWNER TABLE_NAME COLUMN_GROUP_NAME RESOLUTION_COLUMN
--------------- --------------- -------------------- -------------------------
HR EMPLOYEES COMPENSATION_CG CDRTS$COMPENSATION_CG
HR EMPLOYEES JOB_IDENTIFIER_CG CDRTS$JOB_IDENTIFIER_CG