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:
-
Die erste, eine standardmäßige
MAP-Anweisung, ordnet die Quelltabelle der eigentlichen Zieltabelle zu. -
Die zweite, eine exceptions MAP-Anweisung, ordnet die Quelltabelle der Exceptions-Tabelle (statt der Zieltabelle) zu. Die Exception-Anweisung
MAPwird unmittelbar nach einem Fehler in der Quelltabelle ausgeführt, um die Zeilenwerte an die Exception-Tabelle zu senden.Um eine
MAP-Anweisung als eine Exceptions-AnweisungMAPzu identifizieren, verwenden Sie die OptionenINSERTALLRECORDSundEXCEPTIONSONLY. Die Exceptions-AnweisungMAPmuss unmittelbar der regulärenMAP-Anweisung folgen, die dieselbe Quelltabelle enthält. Verwenden Sie eineCOLMAP-Klausel in der Exceptions-AnweisungMAP, wenn die Quell- und Exception-Tabellenspalten nicht identisch sind oder wenn Sie zusätzliche Informationen zusätzlichen Spalten in der Exceptions-Tabelle zuordnen möchten, wie Informationen, die über Spaltenkonvertierungsfunktionen oderSQLEXECerfasst werden.
Weitere Informationen zu diesen Parametern finden Sie in der Referenz zu Parametern und Funktionen für Oracle GoldenGate.
-
Eine reguläre
MAP-Anweisung, mit der die Quelltabelleggs.equip_accountder Zieltabelleequip_account 2.zugeordnet wird -
Eine Exception-Anweisung
MAP, die dieselbe Quelltabelle der Exception-Tabelleggs.equip_account_exceptionzuordnet.
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.