Tabellen für die Verarbeitung vorbereiten
Sie müssen die folgenden Aufgaben ausführen, um die Tabellen für die Verwendung in einer Oracle GoldenGate-Umgebung für Db2 z/OS vorzubereiten.
Trigger deaktivieren und Constraints kaskadieren
Deaktivieren Sie Trigger, kaskadieren Sie Lösch-Constraints, und kaskadieren Sie Aktualisierungs-Constraints für die Zieltabellen, oder ändern Sie sie so, dass vom Oracle GoldenGate-Datenbankbenutzer vorgenommene Änderungen ignoriert werden. Oracle GoldenGate repliziert DML, die sich aus einem Trigger- oder Kaskaden-Constraint ergibt. Wenn derselbe Trigger oder Constraint in der Zieltabelle aktiviert wird, wird er aufgrund der replizierten Version redundant, und die Datenbank gibt einen Fehler zurück. Betrachten Sie das folgende Beispiel, bei dem die Quelltabellen emp_src und salary_src und die Zieltabellen emp_targ und salary_targ sind.
-
Ein Löschvorgang wird für
emp_srcausgegeben. -
Ein Löschvorgang wird in
salary_srckaskadiert. -
Oracle GoldenGate sendet beide Löschvorgänge an das Ziel.
-
Der übergeordnete Löschvorgang kommt zuerst an und wird auf
emp_targangewendet. -
Der übergeordnete Löschvorgang kaskadiert einen Löschvorgang in
salary_targ. -
Der kaskadierte Löschvorgang aus
salary_srcwird aufsalary_targangewendet. -
Die Zeile wird in Schritt 5 gelöscht und kann nicht gefunden werden.
Eindeutigkeit der Zeilen für Tabellen sicherstellen
Oracle GoldenGate erfordert eine eindeutige Zeilen-ID in den Quell- und Zieltabellen, um die richtigen Zielzeilen für replizierte Aktualisierungen und Löschvorgänge zu finden.
Sofern keine KEYCOLS-Klausel in der TABLE- oder MAP-Anweisung vorhanden ist, wählt Oracle GoldenGate eine Zeilen-ID aus, die in der folgenden Prioritätsreihenfolge verwendet werden soll:
-
Primärschlüssel
-
Erster eindeutiger Schlüssel alphanumerisch, der keinen Zeitstempel oder keine nicht materialisierte berechnete Spalte enthält.
-
Wenn keiner der oben genannten Schlüsseltypen vorhanden ist (auch wenn andere Schlüsseltypen in der Tabelle definiert sind), erstellt Oracle GoldenGate einen Pseuderschlüssel aller Spalten dass die Datenbank die Verwendung in einem eindeutigen Schlüssel zulässt, ausgenommen diejenigen, die Oracle GoldenGate nicht in einem Schlüssel unterstützt, oder diejenigen, die von der Oracle GoldenGate-Konfiguration ausgeschlossen sind.
Hinweis: Wenn andere nicht verwendbare Schlüssel in einer Tabelle oder keine Schlüssel in der Tabelle vorhanden sind, protokolliert Oracle GoldenGate eine entsprechende Meldung in der Berichtsdatei. Wenn Sie einen Schlüssel aus allen Spalten erstellen, wird die Performance von Oracle GoldenGate im Quellsystem beeinträchtigt. Auf dem Ziel führt dieser Schlüssel dazu, dass Replicat eine umfangreichere, weniger effiziente WHERE-Klausel verwendet.
- Wenn eine Tabelle über keinen geeigneten Schlüssel verfügt oder die vorhandenen Schlüssel nicht verwendet werden sollen, können Sie einen Ersatzschlüssel definieren, wenn die Tabelle Spalten enthält, die immer eindeutige Werte enthalten. Sie definieren diesen Ersatzschlüssel, indem Sie eine
KEYCOLS-Klausel in die Extract-ParameterTABLEund Replicat-ParameterMAPaufnehmen. Der angegebene Schlüssel überschreibt alle vorhandenen Primär- oder eindeutigen Schlüssel, die Oracle GoldenGate findet. Siehe TABLE | MAP in Referenz für Oracle GoldenGate.
Verwenden von KEYCOLS zur Angabe eines benutzerdefinierten Schlüssels
Wenn eine Tabelle nicht über einen der oben genannten Typen von Zeilen-IDs verfügt oder wenn Sie die Verwendung dieser IDs bevorzugen, können Sie einen Ersatzschlüssel definieren, wenn die Tabelle Spalten enthält, die immer eindeutige Werte enthalten. Sie definieren diesen Ersatzschlüssel, indem Sie eine KEYCOLS-Klausel in die Extract-Parameter TABLE und Replicat-Parameter MAP aufnehmen. Der angegebene Schlüssel überschreibt alle vorhandenen Primär- oder eindeutigen Schlüssel, die Oracle GoldenGate findet. Weitere Informationen finden Sie unter Referenz für Oracle GoldenGate.
Tabellen mit ROWID-Spalten verarbeiten
Jeder Versuch, in eine Zieltabelle einzufügen, die eine Spalte mit dem Datentyp ROWID GENERATED ALWAYS (Standard) enthält, schlägt mit dem folgenden ODBC-Fehler fehl:
ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.
Sie können eine der folgenden Aktionen ausführen, um Tabellen mit ROWID-Spalten vorzubereiten, die von Oracle GoldenGate verarbeitet werden sollen:
-
Stellen Sie sicher, dass alle
ROWID-Spalten in Zieltabellen alsGENERATED BY DEFAULTdefiniert sind. -
Wenn die Tabellendefinition nicht geändert werden kann, können Sie sie mit dem folgenden Verfahren umgehen.
So umgehen Sie ROWID GENERATE ALWAYS:
-
Erstellen Sie für die Quelltabelle eine Extract
TABLE-Anweisung, und verwenden Sie eineCOLSEXCEPT-Klausel in dieser Anweisung, die die SpalteROWIDausschließt. Beispiel:TABLE tab1, COLSEXCEPT (rowidcol);Die
COLSEXCEPT-Klausel schließt die SpalteROWIDaus, die erfasst und in der Zieltabelle repliziert wird. -
Stellen Sie für die Zieltabelle sicher, dass Replicat nicht versucht, die Spalte
ROWIDals Schlüssel zu verwenden. Dies kann auf eine der folgenden Arten erfolgen:-
Geben Sie einen Primärschlüssel in der Zieltabellendefinition an.
-
Wenn kein Schlüssel erstellt werden kann, erstellen Sie einen Replicat-Parameter
MAPfür die Tabelle, und verwenden Sie eineKEYCOLS-Klausel in dieser Anweisung, die eindeutige Spalten mit Ausnahme der SpalteROWIDenthält. Replicat verwendet diese Spalten als Schlüssel. Beispiel:MAP tab1, TARGET tab1, KEYCOLS (num, ckey);
-
Materialized Query-Tabellen verwalten
Um die Parität zwischen den materialisierten Quell- und Zielabfragetabellen (MQT) beizubehalten, replizieren Sie die Basistabellen, nicht jedoch die MQTs. Die MQTs werden in der Zieldatenbank basierend auf den Änderungen verwaltet, die Replicat für die Basistabellen anwendet.
Die folgenden Regeln gelten für die Konfiguration dieser Tabellen:
-
Nehmen Sie die Basistabellen in die Anweisungen
TABLEundMAPauf. -
Nehmen Sie keine MQTs in die Anweisungen
TABLEundMAPauf. -
Platzhalter können in
TABLE- undMAP-Anweisungen verwendet werden, auch wenn sie MQT-Namen zusammen mit regulären Tabellennamen auflösen können. Oracle GoldenGate schließt MQTs automatisch aus Listen mit Platzhaltern aus. MQT, die explizit in einer ExtractTABLE-Anweisung nach Name aufgeführt wird, führt jedoch zu einem Abbruch von Extract.