Das Datenbanksystem protokolliert alle Transaktionen, die Anwendungsdaten oder den Datenbankkatalog ändern, in Log-Einträgen. Das Datenbanksystem verwendet diese Log-Einträge, um SQL-Anweisungen gegebenenfalls rückgängig machen oder wiederholen zu können.
Es gab einen Stromausfall. Die Datenänderungen, die die letzten Transaktionen durchgeführt haben, hatte das Datenbanksystem nur im Data-Cache abgelegt und noch nicht mit einem Savepoint in den Datenbereich geschrieben. Durch den Stromausfall sind diese Datenänderungen im Data-Cache (Arbeitsspeicher) verloren gegangen und müssen deswegen vom Datenbanksystem wiederholt werden.
Arten von Log-Einträgen
Name |
Verwendung |
Undo-Log-Einträge (Before-Images) |
- ermöglichen das Rückgängigmachen noch nicht abgeschlossener Transaktionen - ermöglichen konsistente Sichten (nur für SAP liveCache-Datenbankinstanzen) |
Redo-Log-Einträge (After-Images) |
- ermöglichen das Wiederholen bereits abgeschlossener Transaktionen |
Um das Logging zu konfigurieren, verwenden Sie die Log-Einstellungen und Datenbankparameter.
...
1. Zu Beginn einer Transaktion, die Daten ändern wird, schreibt das Datenbanksystem Undo-Log-Einträge (Before-Images) für alle Datenbankobjekte, die von der Transaktion geändert werden sollen, in eine Undo-Log-Datei im Datenbereich.
Jeder Undo-Log-Eintrag in der Undo-Log-Datei erhält eine Undo-Sequenznummer, beginnend mit 0.
2. Während der Transaktion schreibt das System kontinuierlich Redo-Log-Einträge in eine Log-Warteschlange im Arbeitsspeicher.
Eine Transaktion schreibt immer in dieselbe Log-Warteschlange.
3. Wenn die Log-Warteschlange voll ist, schreibt der Log-Writer die Redo-Log-Einträge in den Log-Bereich.
Beim Schreiben der Redo-Log-Einträge in den Log-Bereich gibt das Datenbanksystem jeder Seite eine Sequenznummer und einen Zeitstempel. Anhand der Sequenznummern kann das Datenbanksystem später die eindeutige Reihenfolge der Seiten im Log-Bereich ermitteln. Den Zeitstempel benötigt das Datenbanksystem, um die Datenbankinstanz in den Zustand zu einem bestimmten Zeitpunkt wiederherstellen zu können.
Die Zeitintervalle zwischen den einzelnen Schreibvorgängen aus den Log-Warteschlangen in den Log-Bereich sind sehr viel kleiner als die Zeitintervalle zwischen Savepoints.
Wenn der Log-Bereich voll ist, dann sperrt das Datenbanksystem alle Log-Warteschlangen und hält alle Transaktionen an. Datenbankbenutzer können keine Datenänderungen in der Datenbank mehr durchführen. Sie müssen Redo-Log-Einträge aus dem Log-Bereich auf Datenträger sichern, damit das Datenbanksystem alte Redo-Log-Einträge im Log-Bereich wieder überschreiben kann (Ausnahmen: Überschreibmodus des Log-Bereichs ist eingeschaltet; automatische Log-Sicherung ist eingeschaltet).
4. Am Ende der Transaktion sind folgende Situationen möglich:
○ Die Transaktion wird mit COMMIT abgeschlossen.
Das Datenbanksystem schreibt die restlichen Redo-Log-Einträge (After-Images) aus der Log-Warteschlange in den Log-Bereich. Log-Seiten in der Log-Warteschlange, die noch nicht voll waren, verbleiben nach dem Schreiben in der Log-Warteschlange, werden weiter gefüllt und bei einem erneuten Schreibvorgang wieder in den Log-Bereich geschrieben.
Wenn die Undo-Log-Datei Aktionen für die Garbage-Collectors enthält oder wenn die Undo-Log-Datei größer als eine Seite ist, dann weist das Datenbanksystem sie der History-Verwaltung zu. Zu einem späteren Zeitpunkt löscht ein Garbage-Collector die Undo-Log-Datei aus dem Datenbereich, siehe History-Verwaltung. Ansonsten löscht die Transaktion die Undo-Log-Datei.
○ Die Transaktion wird mit ROLLBACK abgebrochen.
Das Datenbanksystem verwendet die Undo-Log-Einträge, um alle Datenänderungen rückgängig zu machen.
Bereits in den Log-Bereich und in die Log-Warteschlange geschriebene Redo-Log-Einträge verbleiben dort und werden vom Datenbanksystem ignoriert.
Protokollierung der Datenänderungen einer Transaktion, die mit COMMIT abgeschlossen wird
Siehe auch: