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.

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:

  1. Primärschlüssel

  2. Erster eindeutiger Schlüssel alphanumerisch, der keinen Zeitstempel oder keine nicht materialisierte berechnete Spalte enthält.

  3. 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.

  1. 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-Parameter TABLE und Replicat-Parameter MAP aufnehmen. 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:

So umgehen Sie ROWID GENERATE ALWAYS:

  1. Erstellen Sie für die Quelltabelle eine Extract TABLE-Anweisung, und verwenden Sie eine COLSEXCEPT-Klausel in dieser Anweisung, die die Spalte ROWID ausschließt. Beispiel:

    TABLE tab1, COLSEXCEPT (rowidcol);

    Die COLSEXCEPT-Klausel schließt die Spalte ROWID aus, die erfasst und in der Zieltabelle repliziert wird.

  2. Stellen Sie für die Zieltabelle sicher, dass Replicat nicht versucht, die Spalte ROWID als 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 MAP für die Tabelle, und verwenden Sie eine KEYCOLS-Klausel in dieser Anweisung, die eindeutige Spalten mit Ausnahme der Spalte ROWID enthä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: