Recovery (Datenbanken)
Klassifikation #
Fehler in einer noch nicht comitteten Transaktion #
- Der Effekt aller bisherigen Operationen dieser Transaktion muss zurückgesetzt werden. Dabei werden Compensating Log Records (siehe unten ) erstellt.
R1 - Recovery
Fehler mit Hauptspeicherverlust #
- Abgeschlossene TAs (Winner) müssen erhalten bleiben: redo
R2 - Recovery
- Nicht abgeschlossne TAs (Loser) müssen zurückgesetzt werden: undo
R3 - Recovery
Fehler mit Hintergundspeicherverlust #
R4 - Recovery
Wiederanlauf nach einem Fehler #
Die meisten wiederherzustellenden TA sind Winner (in der Regel), da nur die TA die zum Zeitpunkt des Absturzes aktiv waren die Loser sind. Abortete TA (rückgängig gemacht durch R1-Recovery sind keine Loser, da die Transaktion schon beendet ist)
Drei Phasen:
-
Analyse:
- Log Datei wird von Anfang bis Ende analysiert.
- Ermittlung der Winner Transaktionen (alle TAs für die es einen commit Log Eintrag gibt, oder das erfolgreiche Abschließen einer R1 recovery)
- Ermittlung der Loser Transaktionen (alle anderen)
-
Wiederholung der Historie
- Alle protokollierten Änderungen ewrden in de Reihenfolge der Ausführung in die Datenbases Eingebracht
- Die LSN des Logeintrags wir der LSN der Seite verglichen. Wenn die Seite schon eine höhere LSN hat, ist für diesen Log Eintrag nichts zu tun.
- Ansonsten wird der Eintrag auf der Seite und die LSN der Seite aktuallisiert
-
Undo der Loser
- Loser TA werden ähnlich wie bei R1-Recovery rückgängig gemacht
- Dabei schreiben sie auch Log Records: Compensating Log Records (CLR)
- CLR haben natürlich auch weiter fortlaufende LSN s
- CLR enthalten nur die Undo information der originalen Operationen als Redo.
- Sie enthalten kein eigenes Undo, weil man sie nie rückgängig machen wird. (Einmal Loser immer Loser)
- Die LSN der CLRs landen natürlich auch wieder auf den Seiten damit bei einem Wiederanlauf nach einem Fehler erkannt werden kann ob CLRs zu wiederholen sind oder nicht.
Im 2. Schritt werden auch Loser wiederhergestellt. Um Idempotenz zu garantieren. Beim Wiederanlauf kann das System wieder crashen. Deshalb ist es wichtig dass die LSN konsistent auf den Seiten ist.