Datenbank Log
Wichtig für Recovery .
-
Logeinträge bestehen aus:
- Log Sequence Number (LSN)
- Transaktions ID
- Page ID
- Page Kennung für diesen Logeintrag.
- Wenn mehere Pages geändert werden sollen, müssen für alle Pages Logeinträge erstellt werden.
- Redo info
- Gibt an wie die Änderung nachvolzogen werden kann
- Undo info
- Gibt an wie die Änderung rückgängig gemacht werden kann
- Previous LSN
- Die LSN auf den vorherigen Logeintrag derselben Transaktion (nützlich für schnelle R1 Recovery und R3 Recovery ).
-
Compensating Log Records (CLR) (Sie Recovery (Datenbanken) ) bestehen aus:
- LSN
- Transaktions ID
- Page ID
- Redo info
- UndoNextLSN (Previous Lsn der rückgängig zu machenden Operation)
-
Also fast das gleiche wie normale LSN nur ohne Undo information. Sie werden nie Rückgängig gemacht. Sie werden nur zum rückgängig machen von TAs benutzt. Einmal Loser immer Loser. Keine Undo Info nötig.
-
Recovery Operationen schreiben auch Log Einträge (sie haben als Undo die Redo information der Operation den sie rückgängig machen). Das ist wichtig, weil wenn das System crasht wärend einer Recovery ist es wichtig zu wissen wie weit das System beim Recovery schon gekommen ist, damit es beim nächsen Anlauf weiß in welchem Zustand die Daten sind und wo es weiter machen muss bei der Recovery.
Logische vs Physische Protokollierung #
Beim Speichern der Undo- und Redo-Info gibt es zwei Möglichkeiten:
-
Physische Protokollierung: Die Undo-Information enthält den Zustand vor der Ausführung der Operation und die Redo-Operation enthält den Zustand nach der Operation.
-
Logische Protokollierung: Die Undo-Information enthält die Operation um aus dem after-image das before-image zu erstellen und andersherum.
Beispiel #
- hier: logische Protokollierung
- BOT (Begin of transaction) erstellt einen Logeintrag
- lesen erstellt keine Logeinträge
- lokale Änderungen (im Programmcode) erstellen (logischerweise) keine Logeinträge. Die Datenbank weiß ja nicht was man im Java Code macht.
- Update Befehle an die Datenbank erstellen Logeinträge
- commit muss auch einen Logeintrag erstellen
Log Infrastruktur #
- Log-Puffer -> Ring Puffer (Für R1 Recovery
)
- Wird in reglemäßigen Abständen in Log Dateien, Logarchiv, und global redundant rausgeschrieben (siehe auch nächster Punkt).
- Datenbasis und Log Datei in gleichem Rechenzentrum (Für R2 und R3 ecovery ). Für Redundanz werden die Log Dateien auch weltweit verteilt.
- DB Archiv und Log-Archiv (zurückreichend mindestens bis zum Datum der DB-Archiv Erstellung) in anderem Rechenzentrum (Für R4 Recovery )