Behandlung von Datenbankausnahmen

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Datenquellen und -ziele > Datenbanken und MapForce >

Behandlung von Datenbankausnahmen

Bei der Ausführung von Mappings, bei denen Änderungen in einer Datenbank vorgenommen werden, können in MapForce (oder MapForce Server oder einem mit MapForce generierten Programm) unter Umständen im Zusammenhang mit der Datenbank verschiedene Fehler auftreten. So können für das Datenbankkonto eventuell nicht genügend Rechte vorhanden sein, um eine bestimmte Datenbankaktion auszuführen oder es können Datenbank-Constraints vorhanden sein, durch die verhindert wird, dass ungültige Daten durch das Mapping eingefügt oder aktualisiert werden. Letzteres kann z.B. vorkommen, wenn eine Tabellenspalte obligatorisch ist, aber vom Mapping kein Wert dafür bereitgestellt wird.

 

Damit bei Datenbankausnahmen ein Rollback durchgeführt werden kann, können Sie für das Mapping Datenbanktransaktionen konfigurieren. Sie können die Verwendung von Transaktionen, wie unten beschrieben, auf Ebene der Datenbankkomponente und auf Ebene der Tabellenaktionen aktivieren.

 

Die in MapForce konfigurierten Transaktions-Rollback-Einstellungen werden beibehalten, wenn Sie das Mapping entweder mit MapForce Server oder einem mit MapForce generierten Programm ausführen.

 

Transaktionen auf Datenbankkomponentenebene

Um Transaktionen auf Datenbankkomponentenebene zu aktivieren, gehen Sie folgendermaßen vor:

 

1.Klicken Sie mit der rechten Maustaste auf die Datenbankkomponente und wählen Sie im Kontextmenü den Befehl Eigenschaften aus. (Oder doppelklicken Sie alternativ dazu auf die Titelleiste der Datenbankkomponente). Daraufhin wird das Dialogfeld "Komponenteneinstellungen" der Datenbank geöffnet.

mf_dbtran_00

2.Aktivieren Sie das Kontrollkästchen Transaktionen verwenden.

 

Dadurch werden alle von der Datenbankkomponente vorgenommenen Änderungen in eine Transaktion gesetzt, die bei Auftreten eines Fehlers mit Rollback rückgängig gemacht wird. Wenn während der Ausführung eines Mappings ein Fehler auftritt, hängt das Ergebnis von der Option ab, die Sie aus der Dropdown-Liste auswählen:

 

Rollback für oberste Transaktion und beenden - Die Transaktion, innerhalb der alle an der Datenbankkomponente vorgenommenen Änderungen stehen, wird mit Rollback rückgängig gemacht und die Ausführung des Mappings wird abgebrochen.
Rollback für oberste Transaktion und fortfahren - Wie oben, doch wird die Ausführung des Mappings nach dem Rollback fortgesetzt (z.B., um eine zweite Zielkomponente, falls vorhanden, zu verarbeiten).

 

Einige Mappings können mehrere Datenbankkomponenten enthalten. Für all diese können wiederum entweder dieselbe Datenbankverbindung oder auch Verbindungen zu komplett anderen Datenbanken verwendet werden. Das Ergebnis solcher Mappings hängt im Fall eines Datenbankfehlers vom Ausführungsprozessor ab:

 

Wenn das Mapping mit MapForce ausgeführt wird, kann während der Ausführung des Mappings nur eine Zielkomponente verarbeitet werden. Dies ist die Komponente, für die die Schaltfläche Vorschau btn_component_preview_pressed aktiviert ist. Wenn in dieser Komponente ein Datenbankfehler auftritt und das Kontrollkästchen Transaktionen verwenden aktiviert ist, so werden alle Änderungen an der Komponente mit einem Rollback rückgängig gemacht.
Wenn das Mapping mit MapForce Server oder einem mit MapForce generierten Programm ausgeführt wird, werden alle Zielkomponenten der Reihe nach verarbeitet. In diesem Fall wird bei einem Datenbankfehler für die Datenbankkomponente, bei der der Fehler aufgetreten ist, ein Rollback durchgeführt. Je nachdem, welchen Eintrag Sie in der Dropdown-Liste Bei Auftreten eines Fehlers ausgewählt haben, wird das Mapping nun entweder beendet oder es wird mit der Verarbeitung der nächsten Zielkomponente fortgefahren.

 

Nähere Informationen zu allen Einstellungen des Dialogfelds "Komponenteneinstellungen" für Datenbanken finden Sie unter Datenbank-Komponenteneinstellungen.

 

Transaktionen auf Tabellenaktionsebene

Bei Transaktionen auf Ebene von Tabellenaktionen wird jede einzelne Tabellenaktion (INSERT, UPDATE, usw.) in eine Transaktion eingeschlossen. Wenn eine Einfüge- oder Aktualisierungsaktion bei dieser Konfiguration fehlschlägt, kann nur die jeweilige fehlgeschlagene Aktion mit Rollback rückgängig gemacht werden und andere Datensätze können weiterhin verarbeitet werden. Um Transaktionen auf Tabellenaktionsebene zu aktivieren, aktivieren Sie im Dialogfeld "Datenbankaktionen" das Kontrollkästchen Transaktionen verwenden (siehe auch Einstellungen für Datenbankaktionen).

mf_dbtran_01

Es stehen die folgenden Optionen zur Verfügung:

 

Rollback für oberste Transaktion und beenden - Wenn im Mapping mehrere Tabellen mit einer Parent-Child-Beziehung aktualisiert werden sollen, können Transaktionen nicht nur für die Parent-Tabelle, sondern auch für die Child-Tabelle aktiviert werden. Da Transaktionen auf mehreren Ebenen aktiviert werden können, bezieht sich "oberste" auf die Transaktion auf der obersten Ebene in der Hierarchie. Dies ist die Transaktion ab Ebene der Datenbankkomponente, wenn Sie Transaktionen auf dieser Ebene aktiviert haben. Andernfalls ist es die auf der obersten Tabellenaktion definierte Transaktion, wenn die Komponente mehrere verschachtelte Tabellenaktionen hat. Um diese Option zu verstehen, bedenken Sie, dass in einer Komponente mehrere hierarchisch verschachtelte Tabellen aktualisiert werden können, wie unter Einfügen von Daten in mehrere verknüpfte Tabellen beschrieben. So kann eine Komponente z.B. eine übergeordnete "INSERT"-Aktion haben, die Personendatensätze einfügt, und eine darunter verschachtelte "INSERT"-Aktion, die für jeden Personendatensatz eine oder mehrere Adressen in eine separate Tabelle einfügt. Da Sie für beide INSERT-Aktionen Transaktionen aktivieren können, bezieht sich "oberste" auf die oberste Ebene in der Hierarchie (in diesem Beispiel auf die Einfügeaktion für Personen). Wenn daher beim Einfügen einer Adresse eine Ausnahme auftritt, wird die oberste Transaktion (in diesem Fall auf Ebene der person-Tabelle) rückgängig gemacht und die Ausführung wird beendet. Anders ausgedrückt, wird kein Personendatensatz eingefügt, wenn die Adresse der Person nicht eingefügt werden konnte.
Rollback für oberste Transaktion und fortfahren -  Wie oben, doch wird die Ausführung des Mappings nach dem Rollback fortgesetzt (z.B. um, eine zweite Zielkomponente, falls vorhanden, zu verarbeiten).
Rollback für aktuelle Transaktion und beenden - Bei einer Ausnahme werden nur die in die aktuelle Transaktion eingeschlossenen Änderungen rückgängig gemacht; zuvor außerhalb der aktuellen Transaktion durchgeführte Änderungen werden in die Datenbank übernommen.
Rollback für aktuelle Transaktion und fortfahren - Wie oben, doch wird das Mapping nach Ausführung des Rollbacks weiter ausgeführt.

 

Transaktionen auf Ebene von gespeicherten Prozeduren

Sie können Datenbanktransaktionen auch für gespeicherte Prozeduren, die als Datenzielkomponente aufgerufen werden, aktivieren. Ein Beispiel dafür finden Sie unter Gespeicherte Prozeduren in Zielkomponenten. Bei gespeicherten Transaktionen, die als Datenquelle (ohne Input-Parameter) oder solchen, die wie eine Funktion (mit Input- und Output) aufgerufen werden, werden Transaktionen nicht unterstützt.

 

Rollback

Um zu sehen, ob zur Mapping-Laufzeit Transaktionen ausgeführt werden, klicken Sie auf das Register Ausgabe und betrachten Sie den von MapForce generierten Pseudo-SQL-Code. In der Abbildung unten sehen Sie die Vorschau auf ein Mapping, in dem Transaktionen auf Komponenten- und Tabellenaktionsebene aktiviert sind. Wie Sie unten sehen, steht die gesamte Operation innerhalb einer Haupttransaktion (die durch die Kommentare --begin transaction und --commit transaction ausgewiesen ist). Außerdem werden für jede INSERT-Operation mehrere kleinere Transaktionen durchgeführt (diese sind durch den Befehl SAVEPOINT gekennzeichnet).

mf_dbtran_02

Wenn ein Mapping in MapForce Server oder über ein mit MapForce generiertes Programm ausgeführt wird, erfolgt der Rollback auf Basis der Optionen, die Sie, wie oben beschrieben, beim Erstellen des Mappings konfiguriert haben. Wenn Sie z.B. die Option Rollback für oberste Transaktion und beenden ausgewählt haben, werden bei einer fehlgeschlagenen INSERT-Operation alle Änderungen rückgängig gemacht, auch wenn einige Einfügungen erfolgreich durchgeführt werden konnten. Wenn Sie jedoch Rollback für aktuelle Transaktion und fortfahren ausgewählt haben, wird nur die fehlgeschlagene INSERT-Aktion bis zum nächstgelegenen Savepoint (Punkt der Speicherung) rückgängig gemacht, das Mapping wird fortgesetzt und es wird versucht weitere Datensätze einzufügen.

 

Wenn Sie ein Mapping, bei dem die Verwendung von Transaktionen aktiviert wurde, mit dem Menübefehl Ausgabe | SQL-Script ausführen direkt in MapForce ausführen, erscheint bei einer Datenbankausnahme ein Dialogfeld, in dem Sie darüber informiert werden, z.B.:

mf_dbtran_03

Sie können daraufhin festlegen, wie danach fortgefahren werden soll:

 

Rollback für diese Transaktion ausführen und beenden

 

Die aktuelle Transaktion wird bereits mit Rollback rückgängig gemacht, wenn das Dialogfeld angezeigt wird.
Am oberen Rand des Vorschaufensters und im Fenster "Meldungen" wird ein Fehler angezeigt.

mf_dbtran_04

 

Übergeordnete Transaktionen werden in die Datenbank übernommen.
Die Mapping-Ausführung wird mit einem Fehlercode beendet.

 

Rollback für diese Transaktion ausführen und fortfahren

 

Die aktuelle Transaktion wird bereits mit Rollback rückgängig gemacht, wenn das Dialogfeld angezeigt wird.
Der Fehler wird als Warnung behandelt und wird im Fenster "Meldungen" angezeigt, sobald die Mapping-Ausführung fertig gestellt wurde.

mf_dbtran_05

Übergeordnete Transaktionen sind nicht betroffen.
Die Mapping-Ausführung wird mit dem nächsten Datensatz (wenn diese Transaktion sich nicht auf Komponentenebene befindet) oder mit der nächsten Komponente (nur MapForce Server) fortgesetzt.

 

Rollback für oberste Transaktion ausführen und beenden

 

Die aktuelle Transaktion wird bereits mit Rollback rückgängig gemacht, wenn das Dialogfeld angezeigt wird.
Am oberen Rand des Vorschaufensters und im Fenster "Meldungen" wird ein Fehler angezeigt.
Übergeordnete Transaktionen werden mit Rollback rückgängig gemacht.
Die Mapping-Ausführung wird mit einem Fehlercode beendet.

 

Anmerkung:Die Option Rollback für oberste Transaktion ausführen und beenden steht im Dialogfeld nur dann zur Verfügung, wenn es verschachtelte Transaktionen (savepoints) gibt.

 

Rollback für oberste Transaktion ausführen und fortfahren

 

Die aktuelle Transaktion wird bereits mit Rollback rückgängig gemacht, wenn das Dialogfeld angezeigt wird.
Der Fehler wird als Warnung behandelt und wird im Fenster "Meldungen" angezeigt, sobald die Mapping-Ausführung fertig gestellt wurde.
Übergeordnete Transaktionen werden mit Rollback rückgängig gemacht.
Die Mapping-Ausführung wird mit dem nächsten Datensatz (wenn diese Transaktion sich nicht auf Komponentenebene befindet) oder mit der nächsten Komponente (nur MapForce Server) fortgesetzt.

 

Anmerkung:Die Option Rollback für oberste Transaktion ausführen und fortfahren steht im Dialogfeld nur dann zur Verfügung, wenn es verschachtelte Transaktionen (savepoints) gibt.

© 2019 Altova GmbH