## Protokollierung von Datenänderungen (Logging)

### Verwendung

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.

### Ablauf

...

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:

Transaktionen

Log-Einträge sichern

Beispiel: Restart

Beispiel: Konsistente Sicht