EXCEPTIONSONLY verwenden

EXCEPTIONSONLY ist für ein Paar von Quell- und Zieltabellen gültig, die explizit benannt und Eins-zu-Eins in einer MAP-Anweisung zugeordnet sind. Das heißt, es dürfen keine Platzhalter vorhanden sein. Um EXCEPTIONSONLY zu verwenden, erstellen Sie zwei MAP-Anweisungen für jede Quelltabelle, für die Sie EXCEPTIONSONLY auf dem Ziel verwenden möchten:

Weitere Informationen zu diesen Parametern finden Sie in der Referenz zu Parametern und Funktionen für Oracle GoldenGate.

In diesem Fall wurden vier zusätzliche Spalten erstellt, zusätzlich zu den Spalten, die in der Tabelle selbst enthalten sind:

DML_DATE
OPTYPE
DBERRNUM
DBERRMSG

Um die Spalte DML_DATE aufzufüllen, wird die Spaltenkonvertierungsfunktion @DATENOW verwendet, um das Datum und die Uhrzeit des nicht erfolgreichen Vorgangs abzurufen. Das Ergebnis wird der Spalte zugeordnet. Um die anderen zusätzlichen Spalten aufzufüllen, wird die Funktion @GETENV verwendet, um den Vorgangstyp, die Datenbankfehlernummer und die Datenbankfehlermeldung zurückzugeben.

Die Option EXCEPTIONSONLY der Exceptions-Anweisung MAP bewirkt, dass die Anweisung erst nach einem nicht erfolgreichen Vorgang in der Quelltabelle ausgeführt wird. Dadurch wird verhindert, dass jeder Vorgang in der Ausnahmetabelle protokolliert wird.

Der Parameter INSERTALLRECORDS bewirkt, dass alle nicht erfolgreichen Vorgänge für die angegebene Quelltabelle, unabhängig vom Vorgangstyp, als Einfügevorgänge in der Ausnahmetabelle protokolliert werden. Hinweis: Für die Ausnahmetabelle dürfen keine Einschränkungen für Primärschlüssel oder eindeutige Indizes gelten. Eindeutigkeitsverletzungen sind in diesem Szenario möglich und würden Fehler verursachen.

Beispiel 9-21 EXCEPTIONSONLY

In diesem Beispiel wird gezeigt, wie Sie REPERROR mit EXCEPTIONSONLY und einer Exceptions-Anweisung MAP verwenden. Dieses Beispiel zeigt nur die Parameter, die sich auf REPERROR beziehen. Für Replicat sind auch andere Parameter erforderlich, die sich nicht auf die Fehlerbehandlung beziehen.

REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));

In diesem Beispiel ist der Parameter REPERROR für die Fehlerbehandlung DEFAULT festgelegt, und die Option EXCEPTION veranlasst den Replicat-Prozess, nicht erfolgreiche Vorgänge als Ausnahmen zu behandeln und die Verarbeitung fortzusetzen.