Läuft eine Transaktion nicht bis zum Ende, aus welchem Grund auch immer, so dürfen die bis jetzt geänderten Daten nicht geändert bleiben, sondern müssen zurückgesetzt werden. Dieses Zurücksetzten wird im allgemeinen Rollback bezeichnet. Ein Rollback kann aus vielen verschiedenen Gründen notwendig werden. Zum Beispiel wenn der user am Ende der Dateneingabe auf "Cancel" clicked so sollen die gemachten Änderungen nicht gesichert werden, oder auch wenn das System abstürtz oder andere Komplikationen auftreten.
Transaktion_1
lock E
Rollback
lock H
read E
read H
H=H+1 000 000
write H
unlock H
if (E>-100 000) else
E=E-1 000 000
write E
unlock E
Es ist oft der Fall, daß eine Transaktion andere Transaktionen aufruft oder durchführt, und diese wiederum ander aufruft oder durchführt, usw. Damit wäre bei einem Rollback nicht nur erforderlich eine Transaktion Back zu rollen, sondern mehrere. Dieser Effekt hat die Bezeichnung Cascading Rollback. Dies ist praktisch kaum durchführbar und ist unbedingt zu vermeiden.
Um dies zu realisieren, muß gewährleistet sein, daß nach einem gewissen Zeitpunkt kein Rollback mehr durchgeführt wird. Dieser Punkt ist nach Beendigung aller Berechnungen und wird Commit Point genannt.
Wenn folgende Reihenfolge eingehalten wird ist gesichert, daß kein Cascading Rollback durchgeführt werden muß. Diese Vorgangsweise nennt man Zwei Phasen Commit.
1. Commit Point wurde erreicht
2. Write to the Database now
3. Unlocks
|