prev up next

Wiederanlauf nach einem Fehler


Abbildung 14.4: Zwei Transaktionstypen bei Systemabsturz

Abbildung 14.4 zeigt die beiden Transaktionstypen, die nach einem Fehler mit Verlust des Hauptspeicherinhalts zu behandeln sind:


Abbildung 14.5: Wiederanlauf in drei Phasen

Der Wiederanlauf geschieht in drei Phasen (Abbildung 14.5):

  1. Analyse: Die Log-Datei wird von Anfang bis Ende analysiert, um die Winner (kann commit vorweisen) und die Loser (kann kein commit vorweisen) zu ermitteln.
  2. Redo: Es werden alle protokollierten Änderungen (von Winner und Loser) in der Reihenfolge ihrer Ausführung in die Datenbasis eingebracht, sofern sich nicht bereits das Afterimage des Protokolleintrags in der materialisierten Datenbasis befindet. Dies ist dann der Fall, wenn die LSN der betreffenden Seite gleich oder größer ist als die LSN des Protokolleintrags.
  3. Undo: Die Log-Datei wird in umgekehrter Richtung, d.h. von hinten nach vorne, durchlaufen. Dabei werden die Einträge von Winner-Transaktionen übergangen. Für jeden Eintrag einer Loser-Transaktion wird die Undo-Operation durchgeführt.

Spezielle Vorkehrungen müssen getroffen werden, um auch Fehler beim Wiederanlauf kompensieren zu können. Es wird nämlich verlangt, daß die Redo- und Undo-Phasen idempotent sind, d.h. sie müssen auch nach mehrmaliger Ausführung (hintereinander) immer wieder dasselbe Ergebnis liefern:

undo(undo(...(undo(a))...)) = undo(a)
redo(redo(...(redo(a))...)) = redo(a)

Für die Redo-Phase wird dies erreicht, indem jeweils die zum Log-Eintrag gehörende Log-Sequence-Number in den reservierten Bereich der Seite geschrieben und beim Zurückschreiben persistent wird. Hierdurch kann bei einem erneuten Redo überprüft werden, ob sich auf der Seite bereits das After Image befindet oder auf dem Before Image noch die Redo-Operation angewendet werden muss.

Während der Redo-Phase wird für jede durchgeführte Undo-Operation ein Compensation Log Record an die Log-Datei angehängt mit eigener LSN, so daßs bei einem erneuten Absturz in der nachfolgenden erneuten Redo-Phase diese Undo-Schritte unter Beachtung ihrer LSN-Einträge wiederholt werden können.


prev up next