Fehlerbehandlung einrichten

Objective

After completing this lesson, you will be able to die Ebenen der Datenwiederherstellungsstrategien erläutern

Fehlerbehandlungsstrategien

Die erste Lösung zur Verwaltung von Fehlersituationen besteht darin, diese zu vermeiden. Einige Fehlersituationen können leicht durch das Erstellen von Jobs unterbunden werden, sodass sie die Probleme berücksichtigen, die häufig zum Scheitern führen.

Einige Situationen sind jedoch unvermeidbar, z.B. Serverausfälle. Anschließend müssen Sie Ihre Datenflüsse entwerfen, um die fehlgeschlagene Situation wiederherzustellen.

Vermeidung von Fehlern

Sie können Fehler in Ihren Datenflüssen vermeiden, indem Sie:

  • Verwenden Sie Bedingungen, damit der Datenfluss nur ausgeführt wird, wenn der Kontext korrekt ist.
  • Verwenden Sie eine Schleife, um von vorne zu beginnen, bis der Kontext korrekt ist.

    Vergessen Sie nicht, einen Ausweg hinzuzufügen, falls die Situation nie erreicht wird!

Ein Beispiel ist, wenn eine externe Datei erforderlich ist, um einen Job auszuführen. Verwenden Sie in diesem Fall die Funktion wait_for_file oder eine While-Schleife und die Funktion file_exists, um zu prüfen, ob die Datei an einem angegebenen Speicherort vorhanden ist, bevor Sie den Job ausführen.

Die While-Schleife ist ein Objekt mit Einzelverwendung, das in einem Workflow verwendet wird. Die While-Schleife wiederholt eine Folge von Schritten, solange eine Bedingung wahr ist.

In der Regel führen die während der While-Schleife ausgeführten Schritte zu einer Änderung der Bedingung, sodass die Bedingung schließlich nicht mehr erfüllt ist und der Workflow aus der While-Schleife beendet wird. Wenn sich die Bedingung nicht ändert, wird die While-Schleife nicht beendet.

Beispiel: Sie möchten, dass ein Workflow wartet, bis das System eine bestimmte Datei schreibt. Verwenden Sie eine While-Schleife, um mithilfe der Funktion file_exists auf das Vorhandensein der Datei zu prüfen. Solange die Datei nicht vorhanden ist, kann der Workflow für eine bestimmte Zeit in den Ruhemodus wechseln, bevor er erneut geprüft wird.

Da das System die Datei möglicherweise nie schreibt, fügen Sie der Schleife eine weitere Prüfung hinzu, z.B. einen Zähler, um sicherzustellen, dass die While-Schleife beendet wird. Ändern Sie also die While-Schleife, um die Existenz der Datei und den Wert des Zählers zu prüfen. Solange die Datei nicht vorhanden ist und der Zähler kleiner als ein bestimmter Wert ist, wiederholen Sie die While-Schleife. Setzen Sie in jeder Iteration der Schleife den Workflow in den Schlafmodus, und erhöhen Sie dann den Zähler.

Ebenen der Datenwiederherstellungsstrategien

Einige Fehler sind nicht vorhersehbar und führen zum Fehlschlagen des Jobs.

Die erneute Ausführung eines fehlgeschlagenen Jobs kann zu Duplikaten von Zeilen führen, die beim ersten Joblauf erfolgreich geladen wurden.

Sie müssen dann eine Möglichkeit finden, Ihre Jobs wiederherzustellen, damit sich die Datenbank in einem korrekten Zustand befindet und Sie mit dem Zeitplan fortfahren können.

Im Folgenden finden Sie einige Wiederherstellungsstrategien:
  • Gesamte Datenbank wiederherstellen

    Verwenden Sie die Standard-RDBMS-Dienste, um den abgestürzten Datencache in einer gesamten Datenbank wiederherzustellen. Diese Option ist nicht im Umfang dieses Kurses enthalten.

  • Verwenden Sie die Transaktionen:

    Richten Sie Ihren Datenfluss so ein, dass er in eine Transaktion eingeschlossen wird, damit Tabellen in einem konsistenten Zustand bleiben.

  • Aus teilweise geladenen Tabellen wiederherstellen:

    Doppeltes Laden von Zeilen vermeiden.

  • Fehlende Werte oder Zeilen wiederherstellen:

    Ermitteln Sie fehlende Werte und verwalten Sie Zeilen, die nicht eingefügt werden konnten.

  • Ausnahmen verwalten:

    Stellen Sie sicher, dass alle Ausnahmen in einem Workflow verwaltet werden.

Abhängig von den Beziehungen zwischen Datenflüssen in Ihrer Anwendung können Sie eine Kombination dieser Techniken verwenden, um Fehler zu beheben.

Einrichten von Transaktionen

Wenn Ihr Datenfluss eine große Datenmenge laden muss oder abhängige Tabellen lädt, z.B. Kundenauftrags- und Kundenauftragspositionstabellen, möchten Sie nicht, dass Zeilen geladen werden, wenn einige andere nicht geladen werden.

Um die Performance und die Verwendung von Ressourcen zu verbessern, lädt SAP Data Services standardmäßig Tabellen in mehreren Transaktionen. Sie können die Option "Zeilen pro Commit" festlegen, um festzulegen, wie viele Zeilen in jeder Transaktion verarbeitet werden.

Wenn Ihr Datenfluss jedoch fehlschlägt, wurden möglicherweise bereits einige Zeilen in der Tabelle festgeschrieben, wenn der Job gestoppt wird.

Um diese Situation zu vermeiden, können Sie Data Services bitten, den gesamten Datenfluss in eine einzelne Transaktion einzubeziehen.

Teilweise geladene Daten

Um zu verhindern, dass doppelte Zeilen eingefügt werden, können mehrere Methoden verwendet werden:

  • Um das Einfügen von Duplikaten zu vermeiden, verwenden Sie eine der folgenden Optionen:
    • Schließen Sie die Table Comparison -Transformation in den Datenfluss ein, um fehlende Zeilen nur dann einzufügen, wenn die Tabelle mehr Zeilen und weniger Felder wie Faktentabellen enthält.
    • Wählen Sie die Option Daten vor dem Laden aus Tabelle löschen oder Tabelle löschen und neu anlegen in der Zieltabelle, um Daten bei jeder Ausführung zu ersetzen. Diese Technik kann optimal sein, wenn die Änderungen an der Zieltabelle im Vergleich zur Größe der Tabelle zahlreich sind.
    • Ändern Sie die Zieltabellenoptionen, um die Funktion zum Laden mit Autokorrektur zu verwenden, wenn eine Tabelle weniger Zeilen und mehr Felder enthält, z.B. Dimensionstabellen.
    • Schließen Sie einen SQL-Befehl ein, um vorherige Teilaktualisierungen vor dem Laden der Tabelle zu entfernen.

Beim Laden mit Autokorrektur wird die Zieltabelle auf vorhandene Zeilen geprüft, bevor der Tabelle neue Zeilen hinzugefügt werden. Die Verwendung der Option zum Laden mit Autokorrektur kann jedoch Jobs verlangsamen. Betrachten Sie diese Technik, wenn die Zieltabelle groß ist und die Änderungen an der Tabelle relativ gering sind.

Preload-SQL-Befehle können teilweise Datenbankaktualisierungen entfernen, die während der unvollständigen Ausführung eines Steps in einem Job auftreten. Normalerweise löscht der Pre-Load-SQL-Befehl Zeilen basierend auf einer Variablen, die vor Beginn des Teileinfügungsschritts festgelegt wurde.

Fehlende Werte oder Zeilen

  • Fehlende Werte mit Validation- oder Query-Transformation verarbeiten
  • Verarbeiten Sie fehlende Zeilen mit den Optionen Überlaufdatei verwenden.

Fehlende Zeilen sind Zeilen, die nicht in die Zieltabelle eingefügt werden können. Beispielsweise können Zeilen fehlen, wenn eine Primärschlüssel-Integritätsregel verletzt wird. Überlaufdateien helfen bei der Bearbeitung eines solchen Datenproblems.

Wenn Sie eine Überlaufdatei angeben und Data Services eine Zeile nicht in eine Tabelle laden kann, schreibt Data Services die Zeile stattdessen in die Überlaufdatei. Das Trace-Protokoll zeigt den Datenfluss an, in dem der Ladevorgang fehlgeschlagen ist, sowie den Speicherort der Datei. Verwenden Sie die Überlaufinformationen, um ungültige Daten in der Quelle oder Probleme in der Datenbewegung zu identifizieren. Jeder neue Lauf überschreibt die vorhandene Überlaufdatei.

Wenn Sie Überlaufdateien verwenden, müssen Sie einen Dateinamen und ein Dateiformat eingeben.

Für das Dateiformat haben Sie zwei Möglichkeiten:

  • Wenn Sie Daten schreiben auswählen, können Sie Data Services verwenden, um die Daten aus der Überlaufdatei zu lesen, zu bereinigen und in die Zieltabelle zu laden.
  • Wenn Sie SQL schreiben auswählen, können Sie die SQL-Befehle verwenden, um das Ziel manuell zu laden, wenn auf das Ziel zugegriffen werden kann.

Achtung

Geben Sie einen vollständigen Pfadnamen für Ihre Überlaufdatei an, um sicherzustellen, dass Data Services eine eindeutige Datei anlegt, wenn mehr als eine Datei im selben Job angelegt wird.

Alternative Workflows

Sie können Jobs einrichten, um alternative Workflows zu verwenden, die alle möglichen Ausnahmen abdecken und Wiederherstellungsmechanismen integriert haben. Mit dieser Technik können Sie den Prozess der Wiederherstellung von Ergebnissen automatisieren.

In diesem Beispiel verwendet der Hauptdatenfluss Standardeinstellungen zum Laden einer Zieltabelle.

Im Falle eines Fehlers zeichnet der Job den Fehler auf. Nachdem Sie das Problem behoben haben, führen Sie den Job erneut aus.

Bei der nächsten Ausführung wird dann ein anderer Datenfluss mit der Option zum Laden mit Autokorrektur verwendet. Dadurch kann der Datenfluss trotz der Zeilen, die möglicherweise bereits zum ersten Mal festgeschrieben wurden, erfolgreich abgeschlossen werden.

Die erfolgreiche Ausführung muss für die nächste Ausführung des Jobs aufgezeichnet werden, um den Standarddatenfluss zu verwenden.

Alternative Workflowkomponenten

Alternative Workflows bestehen aus mehreren Komponenten, wie in der vorherigen Abbildung dargestellt:

  1. Ein Skript, um zu ermitteln, wann eine Wiederherstellung erforderlich ist.

    Dieses Skript liest den Wert in einer Statustabelle und füllt eine globale Variable mit demselben Wert. Der Initialwert wird gesetzt, um anzuzeigen, dass keine Wiederherstellung erforderlich ist.

  2. Eine bedingte Verzweigung, die den entsprechenden Workflow aufruft, basierend darauf, ob eine Wiederherstellung erforderlich ist.

    Die bedingte Verzweigung enthält eine If/Then/Else-Anweisung, die angibt, dass Workflows, die keine Wiederherstellung erfordern, auf eine Weise verarbeitet werden, und solche, die eine Wiederherstellung erfordern, auf eine andere Weise verarbeitet werden.

  3. Ein Workflow mit einem Try-/Catch-Block zum Ausführen eines Datenflusses ohne Wiederherstellung.

    Der Datenfluss, bei dem die Wiederherstellung nicht erforderlich ist, wird ohne die Option Laden mit Autokorrektur eingerichtet. Dadurch wird sichergestellt, dass der Datenfluss nach Möglichkeit in einem weniger ressourcenintensiven Modus ausgeführt wird.

  4. Ein Skript im Catch-Objekt zum Aktualisieren der Statustabelle.

    Das Skript gibt an, dass eine Wiederherstellung erforderlich ist, wenn Ausnahmen generiert werden.

  5. Ein Workflow zum Ausführen eines Datenflusses mit Wiederherstellung und ein Skript zum Aktualisieren der Statustabelle.

    Der Datenfluss ist für eine ressourcenintensivere Verarbeitung eingerichtet, die die Ausnahmen behebt. Das Skript aktualisiert die Statustabelle, um anzuzeigen, dass keine Wiederherstellung erforderlich ist.

Conditionals

Bedingte Bedingungen sind Objekte, die nur einmal verwendet werden, um bedingte Logik in einem Workflow zu implementieren.

Wenn conditional definiert ist, geben Sie eine Bedingung und zwei logische Verzweigungen an:

AnweisungBeschreibung
WennEin Boolescher Ausdruck, der TRUE oder FALSE ergibt. Verwenden Sie Funktionen, Variablen und Standardoperatoren, um den Ausdruck zu konstruieren.
DannWorkflow-Element, das ausgeführt werden soll, wenn der IF-Ausdruck TRUE ergibt.
AndersWorkflow-Element, das ausgeführt werden soll, wenn der IF-Ausdruck FALSE ergibt.

Die Verzweigungen Then und Else der bedingten Verzweigung können jedes Objekt enthalten, das Sie in einem Workflow haben können, einschließlich anderer Workflows, Datenflüsse, verschachtelter bedingter Verzweigungen, Try-/Catch-Blöcke, Skripte usw.

Try-/Catch-Blöcke

Ein Try-/Catch-Block ermöglicht es Ihnen, alternative Workflows anzugeben, wenn während der Jobausführung Fehler auftreten.

Try-/Catch-Blöcke fangen bestimmte Fehlerklassen ab, wenden bereitgestellte Lösungen an und fahren mit der Ausführung fort.

Sie können mehrere Catch-Operationen in einem Block für verschiedene Klassen oder Fehler angeben.

Für jeden Catch

  • Geben Sie eine Ausnahme oder eine Gruppe von Ausnahmen an, die vom Abfangen behandelt werden.

    Um mehr als eine Ausnahme oder Gruppe von Ausnahmen zu behandeln, fügen Sie dem Try-/Catch-Block mehrere Catches hinzu.

  • Geben Sie den Workflow an, der ausgeführt werden soll, wenn die angegebene Ausnahme auftritt.

    Verwenden Sie einen vorhandenen Workflow, oder definieren Sie einen Workflow im Catch-Editor.

Wenn während der Ausführung eines Try-/Catch-Blocks eine Ausnahme ausgegeben wird und kein Catch nach dieser Ausnahme sucht, wird die Ausnahme von der normalen Fehlerlogik behandelt.

Probieren wir es aus

Lassen Sie mich Sie durch die Verwendung eines alternativen Workflows führen. Bereiten wir zunächst alle Objekte vor, die wir benötigen:

Lassen Sie mich Sie nun durch das Anlegen des alternativen Workflows führen: