Tabellen für die Verarbeitung vorbereiten
Die Tabellenattribute in den folgenden Abschnitten müssen in Ihrer Oracle GoldenGate-Umgebung adressiert werden.
Replicat-Überlegungen für Zielidentitätsspalten, Trigger und Constraints
Wenn Sie Daten in eine SQL Server-Zieldatenbank replizieren, die Identitätsspalten, Trigger sowie Constraints für die Kaskadierung und Prüfung enthält, beachten Sie Folgendes:
-
Bei Spalten mit einer Identitätsspalte legt Replicat die
IDENTITY_INSERT ONfür die Tabelle fest, was die Zustellungsperformance reduzieren kann. -
Bei Tabellen mit Triggern oder Kaskadierungs-Constraints kann die Ausführung des Trigger- oder Kaskadierungsvorgangs zu einem Replicat-Fehler führen, wenn das Replicat so konfiguriert ist, dass es dieselben Daten liefert, die ein Trigger einfügt, oder das Kaskadierungs-Constraint aktualisiert oder löscht.
Beispiel:
TableAin der Quelle enthält einen Trigger, der einen Datensatz inTableBeinfügt. Der Extract ist so konfiguriert, dass Datensätze fürTableAundTableBerfasst werden. Auf dem Ziel fügt das Replicat zunächst einen Datensatz fürTableAein. Anschließend wird der Trigger fürTableAausgelöst und inTableBeingefügt. Anschließend versucht Replicat, denselben Datensatz inTableBeinzufügen, was zu einem Replicat-Fehler führt. -
Prüfen Sie auch, ob Fremdschlüssel-Constraints durchgesetzt werden. Dies kann die Zustellungsleistung beeinträchtigen.
-
Setzen Sie für Tabellen in der Zieldatenbank, die Trigger enthalten, den Parameter
SET XACT_ABORTauf "off". Dadurch wird sichergestellt, dass die Ausführung des Triggervorgangs nicht zu fehlenden Transaktionen führt.
Um diese Situationen zu überwinden, gibt es mehrere Optionen, die basierend auf dem Replikationsanwendungsfall implementiert werden können.
-
Bei unidirektionalen Implementierungen, bei denen ein Replicat der einzige Prozess ist, der Daten in die Zieltabellen schreibt, sollten Sie die folgenden Optionen für Identity-Spalten, -Trigger und -Constraints in den Zieltabellen berücksichtigen.
-
Deaktivieren oder löschen Sie die Identity-Eigenschaft, Trigger und Constraints für die Zieltabellen.
-
Ändern Sie die Identitätseigenschaft, die Trigger und Constraints, und setzen Sie die Option
NOT FOR REPLICATIONfür jede Eigenschaft ein, und stellen Sie sicher, dass der Microsoft ODBC-Treiber mindestens Version 17.8.1 ist.
-
-
Bei multidirektionalen Implementierungen, bei denen sowohl ein Replicat als auch eine Anwendung Daten in die Zieltabellen schreiben und Trigger und Constraints aktiviert sind, ändern Sie die Identity-Eigenschaft, die Trigger und Constraints, und setzen Sie die Option
NOT FOR REPLICATIONfür jede Option ein. Stellen Sie außerdem sicher, dass der Microsoft ODBC-Treiber mindestens Version 17.8.1 ist.Um
IDENTITY-Spalten in einer multidirektionalen Replikationskonfiguration zu verwenden, definieren Sie außerdem dieIDENTITY-Spalten mit einem Inkrementwert, der der Anzahl der Server in der Konfiguration entspricht, und einem anderen Seed-Wert für jeden.Beispiel: Eine Konfiguration mit drei Datenbanken lautet wie folgt:
Database1 setzt den Seed-Wert auf 0 mit einem Inkrement von 3.
Database2 setzen Sie den Seed-Wert auf 1 mit einem Inkrement von 3.
Database3 setzt den Seed-Wert auf 2 mit einem Inkrement von 3.
Verbesserung der IDENTITY-Replikation mit Array-Verarbeitung
Da für nur eine Tabelle pro Session IDENTITY_INSERT auf ON gesetzt werden kann, muss Replicat IDENTITY_INSERT kontinuierlich umschalten, wenn IDENTITY-Daten auf mehrere Tabellen in einer Session angewendet werden. Um die Performance von Replicat in dieser Situation zu verbessern, verwenden Sie den Parameter BATCHSQL. BATCHSQL bewirkt, dass Replicat die Arrayverarbeitung verwendet, anstatt SQL-Anweisungen einzeln anzuwenden.
Zeileneindeutigkeit in Quell- und Zieltabelle sicherstellen
Für Oracle GoldenGate ist eine eindeutige Zeilen-ID in den Quell- und Zieltabellen erforderlich, um die richtigen Zielzeilen für replizierte Aktualisierungen und Löschvorgänge zu finden.
Sofern keine KEYCOLS-Klausel in der TABLE- oder MAP-Anweisung verwendet wird, 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 von Oracle GoldenGate nicht in einem Schlüssel unterstützt werden, oder solche, die von der Oracle GoldenGate-Konfiguration ausgeschlossen sind. Hinweis: Wenn andere, nicht verwendbare Schlüssel in einer Tabelle vorhanden sind 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 größere, 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 den ExtractTABLE-Parameter und den ReplicatMAP-Parameter 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 keine anwendbare Zeilen-ID aufweist oder wenn Sie es vorziehen, dass IDs nicht verwendet werden, können Sie einen Ersatzschlüssel definieren, vorausgesetzt, die Tabelle enthält Spalten, die immer eindeutige Werte enthalten. Sie definieren diesen Ersatzschlüssel, indem Sie eine KEYCOLS-Klausel in den Extract TABLE-Parameter und den Replicat MAP-Parameter aufnehmen. Der angegebene Schlüssel überschreibt alle vorhandenen Primär- oder eindeutigen Schlüssel, die Oracle GoldenGate findet.