REPERROR

Gültig für

Replicat

Beschreibung

Mit dem Parameter REPERROR können Sie steuern, wie Replicat auf Fehler reagiert. Die Standardantwort von Replicat auf einen Fehler lautet Abbruch.

Sie können eine REPERROR-Anweisung verwenden, um die meisten Fehler standardmäßig zu behandeln, während Sie eine oder mehrere andere REPERROR-Anweisungen verwenden, um bestimmte Fehler unterschiedlich zu behandeln. Beispiel: Sie können Fehler bei doppelten Datensätzen ignorieren, die Verarbeitung jedoch in allen anderen Fällen abbrechen.

Sie können REPERROR global (im Root-Verzeichnis der Parameterdatei) verwenden, um alle MAP-Anweisungen zu beeinflussen, die darauf folgen, oder Sie können es in einer MAP-Anweisung verwenden, um die in dieser Anweisung angegebenen Tabellen zu beeinflussen. Wenn Sie REPERROR in einer MAP-Anweisung verwenden, können Sie Fehler für jeden Thread eines koordinierten Replicats auf eine bestimmte Weise behandeln.

Fehlerbehandlung auf Datensatzebene verwenden

Alle REPERROR-Optionen mit Ausnahme von TRANSDISCARD und TRANSEXCEPTION wenden eine Fehlerbehandlungsaktion als Reaktion auf einen einzelnen SQL-Vorgang in einem einzelnen Datensatz an. Andere fehlerfreie Datensätze in derselben Transaktion werden wie in den MAP-Anweisungen und gegebenenfalls anderen Parametern in der Parameterdatei konfiguriert verarbeitet.

Fehlerbehandlung auf Transaktionsebene verwenden

Die Optionen TRANSDISCARD, TRANSEXCEPTION und ABEND wenden eine Fehlerbehandlungsaktion auf eine gesamte Transaktion an. Der auslösende Fehler kann in einem einzelnen Datensatz in der Transaktion oder im Commit-Vorgang auftreten. (Mit Commit-Fehlern ist kein bestimmter Datensatz verknüpft.) Folgende Optionen können verwendet werden:

TRANSDISCARD und TRANSEXCEPTION schließen sich gegenseitig aus.

Auswirkung sonstiger Parameter auf Optionen auf Transaktionsebene

TRANSDISCARD und TRANSEXCEPTION berücksichtigen die Grenzen der Quelltransaktion. Das Vorhandensein von BATCHSQL, GROUPTRANSOPS oder MAXTRANSOPS in der Parameterdatei kann sich jedoch auf die Fehlerbehandlungslogik oder das Ergebnis auswirken, weil sie die Transaktionsgrenzen ändern.

Wirkung von BATCHSQL und GROUPTRANSOPS

BATCHSQL oder GROUPTRANSOPS (Standard) gruppieren beide SQL-Vorgänge aus verschiedenen Transaktionen in größere Transaktionen, um die Performance zu verbessern und gleichzeitig die Transaktionsreihenfolge beizubehalten. Wenn diese Parameter wirksam sind und ein Fehler auftritt, versucht Replicat zunächst, sie durch Eingabe eines alternativen Verarbeitungsmodus zu beheben (siehe Dokumentation für diese Parameter). Wenn der Fehler weiterhin besteht, wird TRANSDISCARD oder TRANSEXCEPTION wirksam, und Replicat wird wie folgt in den Quellverarbeitungsmodus zurückgesetzt:

  1. Rollback der gruppierten oder Array-Transaktion ausführen

  2. Dabei wird die beleidigende Transaktion jeweils mit einer SQL-Operation wiederholt, wobei dieselben Transaktionsgrenzen wie die Quelltransaktion verwendet werden.

  3. Er führt die Discard-Logik (TRANSDISCARD) oder die Exceptions-Zuordnung (TRANSEXCEPTION) aus. (Weitere Informationen finden Sie in diesen Optionsbeschreibungen.)

  4. Der Modus BATCHSQL oder GROUPTRANSOPS wird fortgesetzt, nachdem die Fehlerbehandlung TRANSDISCARD abgeschlossen ist.

Wirkung von MAXTRANSOPS

Die Integrität der Fehlerbehandlung auf Transaktionsebene TRANSDISCARD und TRANSEXCEPTION kann durch die Einstellung des Parameters MAXTRANSOPS beeinträchtigt werden. Durch MAXTRANSOPS teilt Replicat sehr große replizierte Quelltransaktionen in kleinere Transaktionen auf, wenn sie auf dem Ziel angewendet werden.

Die Logik TRANSDISCARD und TRANSEXCEPTION führt dazu, dass Replicat nach dem letzten erfolgreichen Commit zum ersten Datensatz zurückrollt. Dies kann der tatsächliche Beginn der beleidigenden Transaktion sein oder nicht. Es hängt davon ab, ob diese Transaktion aufgeteilt wurde und Teile davon in den zuvor festgeschriebenen Transaktionen enthalten sind. In diesem Fall kann Replicat die Aktion TRANSDISCARD oder TRANSEXCEPTION nicht auf die gesamte Transaktion anwenden, da sie in der Quelle ausgegeben wurde, sondern nur auf das Teil, das vom Ziel zurückgesetzt wurde.

Wenn Sie MAXTRANSOPS verwenden, stellen Sie sicher, dass es auf einen Wert gesetzt ist, der größer ist als die größte Transaktion, die voraussichtlich von TRANSDISCARD und TRANSEXCEPTION verarbeitet wird. Dadurch wird sichergestellt, dass Transaktionen nicht in kleinere Transaktionen auf dem Ziel aufgeteilt werden.

Auswirkung von Optionen auf Transaktionsebene auf Statistiken

Die Ausgabe von Informationsbefehlen, wie STATS REPLICAT, zeigt die Gesamtanzahl der Datensätze in der Transaktion an, die von der Logik TRANSDISCARD oder TRANSEXCEPTION verarbeitet wurden. Diese Zahl kann Folgendes widerspiegeln:

Replicat wird bei Fehlern abgebrochen, die durch die Discard-Verarbeitung (TRANSDISCARD) oder die Exception-Zuordnung (TRANSEXCEPTION) verursacht werden.

Weitere Informationen zur Fehlerbehandlung abrufen

Weitere Informationen zum Konfigurieren der Fehlerbehandlung für Extract und Replicat finden Sie unter Fehler verwalten in der Dokumentation zu Oracle GoldenGate Microservices.

Weitere Informationen zum Parameter MAP finden Sie unter "TABLE | MAP".

Standard

TRANSABORT für Deadlocks; ABEND für alle anderen

Syntax

REPERROR {
(
{DEFAULT | DEFAULT2 | <SQL_error> | <user_defined_error>},
{ABEND |
DISCARD |
EXCEPTION |
IGNORE |
RETRYOP [MAXRETRIES <n>] |
TRANSABORT [, MAXRETRIES] [, DELAYSECS <n> | DELAYCSECS <n>] |
TRANSDISCARD |
TRANSEXCEPTION
}
{PROCEDURE,[ABEND|IGNORE|DISCARD]}) |
RESET }

Fehlerspezifikationsoptionen

DEFAULT

Legt eine globale Antwort auf alle Fehler fest, mit Ausnahme der Fehler, für die explizite REPERROR-Anweisungen angegeben werden.

DEFAULT2

Stellt eine Backupstandardaktion bereit, wenn die Antwort für DEFAULT auf EXCEPTION gesetzt ist. Verwenden Sie DEFAULT2, wenn keine Exceptions-Anweisung MAP für eine MAP-Anweisung angegeben ist, für die Fehler erwartet werden.

<SQL_error>

Eine SQL-Fehlernummer. Dies kann ein Fehler auf Datensatzebene oder ein Fehler auf Commit-Ebene sein, wenn TRANSDISCARD und TRANSEXCEPTION verwendet werden.

<user_defined_error>

Ein benutzerdefinierter Fehler, der mit der Option RAISEERROR einer FILTER-Klausel in einer MAP-Anweisung angegeben wird.

Fehlerantwortoptionen

ABEND

Führt ein Rollback für die Transaktion durch, und beendet die Verarbeitung anormal. ABEND ist der Standardwert.

DISCARD

Protokolliert den fehlerhaften Vorgang in der Discard-Datei, aber verarbeitet die Transaktion und nachfolgende Transaktionen weiterhin.

EXCEPTION

Behandelt den Vorgang, der einen Fehler hervorruft, als Ausnahme, verarbeitet jedoch fehlerfreie Vorgänge in der Transaktion normal. Verwenden Sie diese Option zusammen mit einer Exceptions-Anweisung MAP oder zum Arbeiten mit der Option MAPEXCEPTION von MAP. Beispiel: Sie können Spalten aus nicht erfolgreichen Aktualisierungsanweisungen einer Tabelle "Fehlende Aktualisierungen" zuordnen. Geben Sie in der Parameterdatei die Exceptions-Anweisung MAP nach der MAP-Anweisung an, für die der Fehler erwartet wird.

EXCEPTION wendet die Exception-Behandlung nur auf einen einzelnen SQL-Vorgang in einem einzelnen Datensatz an. Um die Exception-Behandlung auf die gesamte Transaktion anzuwenden, verwenden Sie die Option TRANSEXCEPTION.

Hinweis: Wenn das Feature "Conflict Detection and Resolution" (CDR) aktiv ist, werden alle Vorgänge, die Fehler verursachen, automatisch als Ausnahmen behandelt, wenn eine MAP-Anweisung mit Exceptions für die betroffene Tabelle vorhanden ist. In diesem Fall ist REPERROR mit EXCEPTION nicht erforderlich, da AUTOCDR nicht mit REPERROR kompatibel ist und daher REPERROR für Tabellen mit aktiviertem AUTOCDR ignoriert wird. Verwenden Sie REPERROR mit anderen Optionen, um Konflikte zu behandeln, die CDR nicht lösen kann, oder für Konflikte, die CDR nicht behandeln soll.

IGNORE

Ignoriert den Fehler.

RETRYOP [MAXRETRIES <n>]

Wiederholt den problematischen Vorgang. Verwenden Sie die Option MAXRETRIES, um die Anzahl der Wiederholungen zu steuern. Beispiel: Wenn eine Tabelle außerhalb der Extents liegt, können Sie mit RETRYOP mit MAXRETRIES Extents hinzufügen, damit die Transaktion nicht fehlschlägt. Replicat wird nach der angegebenen Anzahl von MAXRETRIES abgebrochen.

TRANSABORT [, MAXRETRIES <n>] [, DELAYSECS <n> | DELAYCSECS <n>]

Bricht die Transaktion ab, und kehrt zum Beginn der Transaktion zurück. Diese Sequenz wird entweder fortgesetzt, bis die Datensätze erfolgreich verarbeitet wurden oder MAXRETRIES abläuft. Wenn MAXRETRIES nicht festgelegt ist, wird die Aktion TRANSABORT kontinuierlich in Schleifen ausgeführt.

Verwenden Sie eine der DELAY-Optionen, um die Wiederholung zu verzögern. DELAYSECS <n> legt die Verzögerung in Sekunden fest. Der Standardwert ist 60 Sekunden. DELAYCSECS <n> legt die Verzögerung in Zentisekunden fest.

Die Option TRANSABORT ist nützlich für die Behandlung von Timeouts und Deadlocks in Datenbanken, die diese Bedingungen unterstützen.

TRANSDISCARD

Verwirft die gesamte Quelltransaktion, wenn ein Vorgang innerhalb dieser Transaktion, einschließlich des Commit-Vorgangs, einen Replicat-Fehler verursacht, der in der REPERROR-Fehlerspezifikation aufgeführt ist. Replicat bricht die Transaktion ab und schreibt diesen Datensatz, falls der Fehler in einem Datensatz aufgetreten ist, in die Discard-Datei. Replicat gibt dann die Transaktion wieder und schreibt alle Datensätze in die Discard-Datei, einschließlich des Commit-Datensatzes. Replicat wird bei Fehlern abgebrochen, die durch die Discard-Verarbeitung verursacht werden.

Wenn der verworfene Datensatz bereits einem Zieldatensatz zugeordnet wurde, schreibt Replicat ihn im Zielformat in die Discard-Datei. Andernfalls wird er im Quellformat geschrieben. Die wiedergegebene Transaktion selbst wird immer im Quellformat geschrieben.

TRANSDISCARD unterstützt Fehler auf Datensatzebene sowie Commit-Fehler.

Weitere Informationen stehen am Anfang dieser Lerneinheit.

TRANSEXCEPTION

Wenn ein mit REPERROR angegebener Fehler in einem Datensatz in einer Transaktion auftritt, führt die Ausnahmemapping-Zuordnung für jeden Datensatz in der Transaktion gemäß der entsprechenden Exceptions-Mapping-Spezifikation durch, wie durch eine MAPEXCEPTION- oder EXCEPTIONSONLY-Klausel in einer Exceptions-MAP-Anweisung definiert. Wenn für einen Datensatz keine entsprechende Ausnahmezuordnungsspezifikation vorliegt oder ein Fehler beim Schreiben in die Ausnahmetabelle auftritt, wird Replicat mit einer Fehlermeldung beendet.

Wenn ein Fehler auftritt und TRANSEXCEPTION verwendet wird, wird die Transaktion von Replicat abgebrochen. Wenn der Fehler in einem Datensatz aufgetreten ist, wird dieser Datensatz in die Discard-Datei geschrieben. Replicat gibt die Transaktion wieder und prüft die Quelldatensätze, um die Spezifikationen für die Exception-Zuordnung zu finden, und führt sie dann aus.

TRANSEXCEPTION unterstützt Fehler auf Datensatzebene sowie Commit-Fehler. Um Fehler auf Datensatzebene (für einzelne SQL-Vorgänge) zu behandeln, ohne fehlerfreie Vorgänge in derselben Transaktion zu beeinträchtigen, verwenden Sie die Option EXCEPTION in einer MAP-Anweisung.

PROCEDURE,[ABEND IGNORE DISCARD]

Verwenden Sie PROCEDURE, um das Verhalten von Replicat zu konfigurieren, wenn ein prozeduraler Replikationsfehler auftritt. Standardmäßig wird Replicat ABEND verwenden, wenn ein prozeduraler Replikationsfehler auftritt.

Die Option IGNORE ignoriert den fehlgeschlagenen Aufruf. Die Option DISCARD stellt die verworfenen Fehler in der Apply-Fehlerqueue in der Zieldatenbank bereit. Diese Fehler können zu einem späteren Zeitpunkt erneut ausgeführt oder gelöscht werden.

RESET

Verwenden Sie eine REPERROR RESET-Anweisung, um Fehlerbehandlungsregeln zu entfernen, die in den vorherigen REPERROR-Parametern angegeben wurden, und wenden Sie die Standardfehlerbehandlung auf alle nachfolgenden MAP-Anweisungen an.

Beispiele für die globale Verwendung von REPERROR

Diese Beispiele zeigen REPERROR, wie es im Root-Verzeichnis der Parameterdatei zum Festlegen globaler Fehlerbehandlungsregeln verwendet wird. Sie können eine oder alle dieser Regeln für eine bestimmte Tabelle oder Tabelle überschreiben, indem Sie REPERROR in einer MAP-Anweisung verwenden. Siehe "Beispiele für die Verwendung von REPERROR Globally und in einer MAP-Anweisung".

Beispiel 1

Das folgende Beispiel zeigt, wie Sie die Verarbeitung für die meisten Fehler stoppen, aber Fehler bei doppelten Datensätzen ignorieren.

REPERROR (DEFAULT, ABEND)
REPERROR (-1, IGNORE)

Beispiel 2

Im folgenden Beispiel wird eine MAP-Anweisung für Exceptions aufgerufen, die erstellt wurde, um Fehler in der Kontentabelle zu behandeln. Fehler in der Produkttabelle führen dazu, dass Replicat anormal beendet wird, weil keine Exception-Anweisung MAP definiert wurde.

REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2, ABEND)
MAP sales.product, TARGET sales.product;
MAP sales.account, TARGET sales.account;
INSERTALLRECORDS
MAP sales.account, TARGET sales.account_exception,
EXCEPTIONSONLY,
COLMAP (account_no = account_no,
optype = @GETENV ('lasterr', 'optype'),
dberr = @GETENV ('lasterr', 'dberrnum'),
dberrmsg = @GETENV ('lasterr', 'dberrmsg'));

Beispiel 3

Im Folgenden werden Fehlerregeln für die erste MAP-Anweisung angewendet, und der Standardwert von ABEND wird dann auf die zweite angewendet.

REPERROR (-1, IGNORE)
MAP sales.product, TARGET sales.product;
REPERROR RESET
MAP sales.account, TARGET sales.account;

Beispiel 4

Im Folgenden wird der beleidigende Datensatz verworfen, und dann wird die gesamte Transaktion wiedergegeben, wenn ein Vorgang für einen darin enthaltenen Datensatz den Fehler 1403 generiert. Andere Fehlertypen führen zum Abbruch von Replicat.

REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD

Beispiel 5

Im Folgenden wird der fehlerhafte Datensatz verworfen, und dann wird die gesamte Transaktion wiedergegeben, um nach einer Spezifikation für die Ausnahmezuordnung zu suchen, die in die Ausnahmetabelle mit dem Namen tgtexception schreibt. Andere Fehler führen dazu, dass Replicat den beleidigenden Datensatz (falls zutreffend) verworfen und dann abgebrochen wird.

REPERROR DEFAULT ABEND
REPERROR 1403 TRANSEXCEPTION
MAP src, TARGET tgt, &
MAPEXCEPTION (TARGET tgtexception, INSERTALLRECORDS, COLMAP (...) );

Beispiele für die Verwendung von REPERROR Globally und in einer MAP-Anweisung

Die folgenden Beispiele zeigen verschiedene Möglichkeiten, wie REPERROR in einer MAP-Anweisung in Verbindung mit einer globalen REPERROR-Anweisung verwendet werden kann.

Beispiel 1

REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);

Wenn im vorherigen Beispiel error1 für die erste MAP-Anweisung auftritt, sollte die Aktion response2 und nicht response1 sein, da ein Override angegeben wurde. Wenn jedoch eine error1 für die zweite MAP-Anweisung auftritt, muss die Antwort response1, die globale Antwort, lauten. Die Antwort für error2 wäre response3, was MAP-spezifisch ist.

Beispiel 2

REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error2>, <response2>),
REPERROR (<error3>, <response3>);

Im vorherigen Beispiel müssen beim Replizieren von src1 in src2 alle Fehler und Aktionen (1-3) angewendet werden, da alle REPERROR-Anweisungen unterschiedliche Fehler beheben (es gibt keine MAP-spezifischen Overrides).

Beispiel 3

REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);
REPERROR (<error1> , <response4>)
MAP <src2>, TARGET <tgt2>, REPERROR (<error3>, <response3>);

Wenn im vorherigen Beispiel error1 für die erste MAP-Anweisung auftritt, muss die Aktion response2 lauten. Für das zweite wäre es response1 (die globale Antwort), und für das dritte wäre es response4 (wegen der zweiten REPERROR-Anweisung). Eine globale REPERROR-Anweisung gilt für alle MAP-Anweisungen, die in der Parameterdatei folgen, bis eine andere REPERROR-Anweisung neue Regeln startet.

Beispiel 4

REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD.
MAP src, TARGET tgt, REPERROR(600 TRANSDISCARD);

Wenn im vorherigen Beispiel Fehler 600 beim Anwenden der Quelltabelle src auf die Zieltabelle tgt auftritt, wird die gesamte Transaktion in die Discard-Datei geschrieben. Wenn Fehler 1403 auftritt, wird dieselbe Aktion basierend auf der globalen REPERROR-Spezifikation ausgeführt. Bei den anderen Fehlern verwirft der Prozess nur den beleidigenden Datensatz und endet dann.