Altova MapForce 2024 Professional Edition

Beim Mappen von Daten auf eine Datenbank können unter Umständen im Zusammenhang mit der Datenbank verschiedene Fehler auftreten (z.B. hat das Datenbankkonto für die Ausführung einer bestimmten Datenbankaktion eventuell nicht genügend Rechte). Damit die Ausführung des Mappings aufgrund solcher Fehler nicht abgebrochen wird, können Sie Transaktions-Rollback-Einstellungen konfigurieren, mit denen Sie Änderungen rückgängig machen können. Ein Transaktions-Rollback kann auf Ebene der Datenbankkomponente, auf Ebene von Tabellenaktionen und auf der Ebene von gespeicherten Prozeduren durchgeführt werden.

 

In diesem Kapitel werden einige mögliche Szenarien für Transaktions-Rollbacks beschrieben. In allen Szenarien in diesem Kapitel wird eine XML-Quelldatei namens Authors.xml und eine Zieldatenbank namens BookCatalog.sqlite verwendet (Mapping unten). Die Tabellen Authors und Books weisen eine Sekundärschlüsselbeziehung auf. Die Tabelle Author ist der Parent der Tabelle Books.

MF_DBTransactionRollback01

In allen Szenarien wurden dieselben Datenbankaktionen konfiguriert:

 

Die Kombination der Aktionen Aktualisieren, wenn... und Rest einfügen in der Tabelle Authors. Für die Spalte Author wurde die Aktualisieren, wenn..-Bedingung definiert.

Die Kombination der Aktionen Aktualisieren, wenn... und Rest einfügen in der Tabelle Books. Für die Spalte Title wurde die Aktualisieren, wenn..-Bedingung definiert.

 

Zusätzlich dazu wurde die Ablaufverfolgung auf Komponentenebene (Einstellung Immer), in der Tabelle Authors (Komponenteneinstellungen verwenden) und in der Tabelle Books table (Komponenteneinstellungen verwenden) aktiviert. Je nach Szenario variieren die Transaktions-Rollback-Einstellungen.

 

Die Szenarien im Überblick

In diesem Kapitel werden die folgenden Szenarien beschrieben:

 

Szenario 1: Wenn ein Author-Datensatz fehlerhaft ist, wird für diesen und alle seine Child-Datensätze ein Rollback durchgeführt; wenn nur ein Book-Datensatz fehlerhaft ist, wird nur für diesen Datensatz ein Rollback durchgeführt.

Szenario 2: Wenn ein Author-Datensatz fehlerhaft ist, wird für diesen und alle seine Child-Datensätze ein Rollback durchgeführt.

Szenario 3: Wenn ein Book-Datensatz fehlerhaft ist, wird nur für diesen Datensatz ein Rollback durchgeführt.

Szenario 4: Wenn ein Book-Datensatz nicht eingefügt werden kann, wird für seinen Parent-Datensatz ein Rollback durchgeführt (ähnlich wie im Szenario 2).

Szenario 5: Falls im Zusammenhang mit der Datenbank ein Fehler auftritt, wird ein Rollback für alle Änderungen an der Datenbank durchgeführt.

 

Szenario 1: Rollback für aktuellen Autor und aktuelles Buch

Im ersten Szenario wird die Transaktionsbehandlung auf Ebene der Tabellenaktion aktiviert: Die Option Rollback für aktuelle Transaktion und fortfahren wurde in beiden Tabellen der Datenbank definiert. Die Kombination dieser Einstellungen bedeutet Folgendes: (i) Wenn ein Author-Datensatz fehlerhaft ist, werden weder dieser Datensatz, noch seine untergeordneten Book-Datensätze in die Datenbank eingefügt und es wird mit der Verarbeitung des nächsten Datensatzes begonnen; (ii) wenn ein Book-Datensatz fehlerhaft ist, sein übergeordneter Author-Datensatz aber gültig ist, wird nur für den fehlerhaften Book-Datensatz ein Rollback durchgeführt und es wird mit der Verarbeitung des nächsten Datensatzes begonnen.

 

Authors.xml

Die Datei Authors.xml enthält Informationen über Autoren und ihre Bücher. Einem der Author-Datensätze fehlen die Informationen über das Land des Autors. In der Quelldatei gibt es auch einen Book-Datensatz, der keine Informationen über den Verlag enthält.

 

BookCatalog.sqlite

Wir haben für die Spalte Country in der Tabelle Authors und die Spalte Publisher in der Tabelle Books festgelegt, dass sie NICHT NULL sein dürfen. Wenn Nullwerte auf diese Spalten gemappt werden, kommt es zu einem Fehler.

 

Ausgabe

Nach Ausführung des SQL-Scripts wird im Ausgabefenster das folgende Dialogfeld angezeigt:

MF_DBTransactionRollback02

Im Dialogfeld Datenbanktransaktion - Exception werden wir über einen Fehler im Zusammenhang mit der Datenbank und den Grund für den Fehler informiert. In diesem Beispiel konnte ein Nullwert nicht in die Spalte Country der Tabelle Authors eingefügt werden (rote Umrandung oben). In diesem Dialogfeld können Sie auch die nächste Aktion auswählen. Standardmäßig ist die im Dialogfeld Datenbankaktionen konfigurierte Aktion ausgewählt. Dieselbe Einstellung kann auch auf alle nachfolgenden Fehler angewendet werden oder Sie können ein Rollback für die fehlerhafte Transaktion durchführen und abbrechen.

 

Nachdem wir die Auswahl bestätigt haben, werden wir über einen weiteren Fehler in der Tabelle Books informiert (Abbildung unten). Dieser Fehler ist aufgetreten, weil versucht wurde, fehlende Publisher-Informationen aus einem unserer Book-Datensätze in das Feld Publisher der Tabelle Books einzufügen. Da der Fehler in der Child-Tabelle aufgetreten ist, kann entweder die aktuelle Transaktion rückgängig gemacht werden (Rollback für diese Transaktion ausführen und beenden/fortfahren) oder es können die Änderungen bis hinauf zur obersten Transaktion rückgängig gemacht werden (Rollback für oberste Transaktion ausführen und beenden/fortfahren). Die oberste Transaktion in diesem Kontext bedeutet, dass für den Parent-Datensatz (Author) des fehlerhaften Child-Datensatzes (Book) ein Rollback durchgeführt wird.

 

Wenn die Hierarchie mehrere Ebenen enthält, wird für jede Ebene ein Rollback durchgeführt, bis die oberste Ebene, für die eine Transaktionsbehandlung aktiviert wurde, erreicht ist. Je nach Bedarf können Sie die Ausführung des Mappings entweder fortsetzen oder abbrechen. Die Option Rollback für oberste Transaktion ausführen und beenden/fortfahren steht nur dann zur Verfügung, wenn es verschachtelte Transaktionen gibt. Nähere Informationen zum Rückgängigmachen der obersten Transaktion finden Sie weiter unten im Szenario 4.

MF_DBTransactionRollback03

In diesem Beispiel lassen wir die in der Abbildung oben gezeigte Transaktions-Rollback-Option unverändert. Nachdem alle Datensätze verarbeitet wurden, sehen wir die generierten SQL-Anweisungen im Ausgabefenster, den Ablaufverfolgungsbericht im XML-Bericht und die Daten, die nun in der Datenbank zur Verfügung stehen.

 

Generierte SQL-Anweisungen

Unten sehen Sie einen Auszug aus dem generierten SQL-Script. Die fehlgeschlagene Insert-Operation wurde bis zum SAVEPOINT rückgängig gemacht. SAVEPOINT stellt einen Punkt in einer Transaktion dar, bis zu dem die Transaktion rückgängig gemacht wird. Mit Hilfe des Befehls SAVEPOINT können Sie die im Anschluss an SAVEPOINT gemachten Änderungen rückgängig machen und die Transaktion so wiederherstellen, wie sie zum Zeitpunkt von SAVEPOINT war.

MF_DBTransactionRollback05

Ablaufverfolgungsbericht

Unten sehen Sie einen Auszug aus dem Ablaufverfolgungsbericht. Im Ablaufverfolgungsbericht sehen Sie die Felder und Werte der Felder, die in der Ablaufverfolgung protokolliert wurden (z.B. <Price>8.6</Price>). Er enthält Informationen über die durchgeführten Aktionen (z.B. Einfügen) und den Fehler (siehe das Element trace:error).

 

<Books>

<trace:values>

<Title>Cockroaches</Title>

<AuthorID>41</AuthorID>

<ISBN>0099590328</ISBN>

<Publisher xsi:nil="true"/>

<NumPages>464</NumPages>

<Year>2016</Year>

<Genre>Crime &amp; Mystery</Genre>

<Price>8.6</Price>

</trace:values>

<trace:actions>

<trace:update rows-affected="0"/>

<trace:insert>

<trace:error code="19" state="1299">NOT NULL constraint failed: Books.Publisher</trace:error>

</trace:insert>

</trace:actions>

</Books>

 

In der Datenbank aktualisierte Daten

Über das Fenster "DB-Abfrage" können Sie überprüfen, welche Daten aktuell in der Datenbank vorhanden sind. Im unten gezeigten Auszug aus der Tabelle Books sehen Sie, dass einige neue Datensätze erfolgreich eingefügt wurden. Da eines der Bücher von Jo Nesbo nicht eingefügt werden konnte (Ablaufverfolgungsbericht oben), wurden von dreien seiner Bücher nur zwei gemappt (The Bat und The Redbreast).

MF_DBTransactionRollback04

 

Andere mögliche Szenarien

Weiter unten sind einige andere mögliche Szenarien beschrieben.

 

Szenario 2: Rollback für aktuellen Autor und alle Bücher das Autors

In diesem Szenario wurde die Option Rollback für aktuelle Transaktion und fortfahren nur für die Tabelle Authors definiert. Bei dieser Konfiguration werden jeder Author- und jeder dazugehörige Book-Datensatz als atomare Operation gesehen.. Wenn ein fehlerhafter Author-Datensatz vorhanden ist oder wenn mindestens einer der Book-Datensätze des Autors fehlerhaft ist, wird für den Datensatz dieses Autors und seine dazugehörigen Child-Datensätze ein Rollback durchgeführt. Anschließend wird mit der Verarbeitung des nächsten Author-Datensatzes fortgefahren.

 

Szenario 3: Rollback nur für das aktuelle Buch

In diesem Szenario wurde die Option Rollback für aktuelle Transaktion und fortfahren nur für die Tabelle Books definiert. Wenn es einen fehlerhaften Book-Datensatz gibt, wird nur für diesen Book-Datensatz ein Rollback durchgeführt und die Verarbeitung anschließend fortgesetzt. Wenn Sie in der Tabelle Books die Option Rollback für oberste Transaktion und fortfahren definieren und auf der Parent-Ebene keine weiteren Transaktionsbehandlungsoptionen festlegen, wird weiterhin nur für den fehlerhaften Book-Datensatz ein Rollback durchgeführt. In diesem Fall besteht kein Unterschied zwischen einem Rollback der obersten und einem der aktuellen Transaktion, da es nur eine Transaktionsebene und keine verschachtelten Transaktionen gibt.

 

Szenario 4: Rollback für Autor, wenn ein Buch nicht eingefügt werden kann

In diesem Szenario ist als Transaktionsoption für die Tabelle Authors Rollback für aktuelle Transaktion und fortfahren definiert ud als Transaktionsoption für die Tabelle Books Rollback für oberste Transaktion und fortfahren:. Wenn bei dieser Konfiguration ein Child-Datensatz fehlerhaft ist, wird für jede Ebene der Hierarchie bis zur obersten Ebene, auf der die Transaktionsbehandlung aktiviert wurde, eine Rollback-Operation durchgeführt. Angenommen, wir möchten einen neuen Author-Datensatz (Jo Nesbo) und seine drei Child-Datensätze einfügen. In einem der Book-Datensätze (The Cockroaches) fehlt die Information über den Verlag. Da für die Tabelle Books in der Spalte Publisher ein NICHT NULL-Constraint definiert wurde, kommt es beim Mappen eines Nullwerts auf dieses Feld zu einem Fehler. Wenn in diesem Szenario ein Fehler auftritt, wird für den fehlerhaften Book-Datensatz (The Cockroaches) zusammen mit den beiden anderen Book-Datensätzen und dem übergeordneten Datensatz ein Rollback durchgeführt. Anschließend wird mit der Verarbeitung des nächsten Author-Datensatzes fortgefahren.

 

Die in diesem Szenario beschriebene Kombination der Transaktionsbehandlungsoptionen ist vor allem für komplexere, verschachtelte Strukturen (z.B. eine Parent-Tabelle mit zwei oder mehr Child-Tabellen) relevant.

 

Szenario 5: Rollback für alle Datenbanktransaktionen und fortfahren

In diesem Szenario wurde die Option Rollback für oberste Transaktion und fortfahren auf Komponentenebene definiert. Diese Einstellung eignet sich v.a. für ein verkettetes Mapping (z.B. XML-DB-JSON). Falls im Zusammenhang mit der Datenbank ein Fehler auftritt, wird ein Rollback für alle Änderungen an der Datenbankkomponente durchgeführt und die Verarbeitung wird bei der JSON-Komponente wieder aufgenommen.

 

© 2017-2023 Altova GmbH