DDL konfigurieren - Voraussetzungen
Die CREATE TABLE AS SELECT-(CTAS-)Anweisungen umfassen SELECT-Anweisungen und INSERT-Anweisungen, die eine beliebige Anzahl zugrunde liegender Objekte referenzieren. Standardmäßig ruft Oracle GoldenGate die Daten für die AS SELECT-Klausel aus der Zieldatenbank ab. Mit diesem Parameter können Sie den CTAS-Vorgang erzwingen, dass die ursprünglichen Einfügungen beibehalten werden.
Hinweis:
Aus diesem Grund können Oracle XMLType-Tabellen, die mit einer CTAS (CREATE TABLE AS SELECT)-Anweisung erstellt wurden, nicht unterstützt werden. Bei XMLType-Tabellen müssen die Zeilenobjekt-IDs zwischen Quelle und Ziel übereinstimmen, was in diesem Szenario nicht verwaltet werden kann. XMLType-Tabellen, die von einer leeren CTAS-Anweisung erstellt wurden (die keine Daten in die neue Tabelle einfügt), können korrekt verwaltet werden.
Darüber hinaus können Sie den Parameter GETCTASDML verwenden, mit dem CTAS die Einfügungen des CTAS wiedergeben und somit OIDs während der Replikation beibehalten kann. Dieser Parameter wird nur mit dem integrierten Dictionary unterstützt, und jedes Downstream-Replicat muss 12.1.2.1 oder höher sein, um den Trail zu konsumieren. Andernfalls kann es zu Divergenzen kommen.
Die Objekte in der AS SELECT-Klausel müssen in der Zieldatenbank vorhanden sein, und ihre Namen müssen mit denen in der Quelle identisch sein.
In einer MAP-Anweisung ordnet Oracle GoldenGate nur den Namen der neuen Tabelle (CREATE TABLE name) der TARGET-Spezifikation zu, ordnet jedoch nicht die Namen der zugrunde liegenden Objekte aus der AS SELECT-Klausel zu. Es könnten Abhängigkeiten von diesen Objekten bestehen, die zu Dateninkonsistenzen führen könnten, wenn die Namen in die TARGET-Spezifikation konvertiert wurden.
Im Folgenden finden Sie ein Beispiel für eine CREATE TABLE AS SELECT-Anweisung in der Quelle und wie sie von Oracle GoldenGate auf das Ziel repliziert wird.
CREATE TABLE a.tab1 AS SELECT * FROM a.tab2;
Die Anweisung MAP für Replicat lautet wie folgt:
MAP a.tab*, TARGET a.x*;
Die ZieldDL-Anweisung, die von Replicat angewendet wird, lautet:
CREATE TABLE a.xtab1 AS SELECT * FROM a.tab2;
Der Name der Tabelle in der AS SELECT * FROM-Klausel bleibt unverändert wie in der Quelle: tab2 (anstatt xtab2).
Um die Daten in den zugrunde liegenden Objekten in Quelle und Ziel konsistent zu halten, können Sie sie für die Datenreplikation durch Oracle GoldenGate konfigurieren. Im vorherigen Beispiel können Sie die folgenden Anweisungen verwenden, um diese Anforderung zu erfüllen:
Quelle
TABLE a.tab*;
Ziel
MAPEXCLUDE a.tab2
MAP a.tab*, TARGET a.x*;
MAP a.tab2, TARGET a.tab2;
Siehe Nicht qualifizierte Objektnamen in DDL korrekt identifizieren.