Logische Architektur des Transaktionsprotokolls

Das SQL Server-Transaktionsprotokoll wird logisch so verwendet, als handele es sich um eine Folge von Protokolleinträgen. Jeder Protokolleintrag wird durch eine Protokollsequenznummer (LSN, Log Sequence Number) gekennzeichnet. Jeder neue Protokolleintrag wird an das logische Ende des Protokolls geschrieben und erhält eine LSN, die höher ist als die LSN des vorherigen Eintrags.

Protokolleinträge werden nacheinander in der Reihenfolge ihres Erstellens gespeichert. Jeder Protokolleintrag enthält die ID der Transaktion, zu der er gehört. Für jede Transaktion werden alle Protokolleinträge, die mit dieser Transaktion verbunden sind, individuell zu einer Kette verknüpft. Dies erfolgt mithilfe von Rückwärtszeigern, durch die der Rollback der Transaktion beschleunigt wird.

Protokolleinträge für Datenänderungen zeichnen entweder die durchgeführte logische Operation oder die Anfangs- und Endabbilder der geänderten Daten auf. Ein Anfangsabbild ist eine Kopie der Daten vor der Durchführung der Operation. Ein Endabbild ist eine Kopie der Daten, nachdem die Operation durchgeführt wurde.

Die Schritte zum Wiederherstellen einer Operation hängen von der Art des Protokolleintrags ab:

  • Protokollierung der logischen Operation

    • Um einen Rollforward für die logische Operation auszuführen, wird sie erneut durchgeführt.

    • Um einen Rollback für die logische Operation auszuführen, wird der logische Umkehrvorgang durchgeführt.

  • Protokollierung der Anfangs- und Endabbilder

    • Um einen Rollforward für die Operation auszuführen, wird das Endabbild übernommen.

    • Um einen Rollback für die Operation auszuführen, wird das Anfangsabbild übernommen.

Im Transaktionsprotokoll werden viele Operationsarten aufgezeichnet. Dazu zählen die Operationen:

  • Der Beginn und das Ende jeder Transaktion.

  • Jede Datenänderung (Einfügung, Aktualisierung oder Löschung). Hierzu zählen auch Änderungen, die von gespeicherten Systemprozeduren oder DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) an beliebigen Tabellen, einschließlich den Systemtabellen, vorgenommen werden.

  • Jede Zuordnung oder Zuordnungsaufhebung von Blöcken und Seiten

  • Erstellen oder Löschen einer Tabelle oder eines Indexes.

Rollback-Operationen werden ebenfalls protokolliert. Jede Transaktion reserviert Speicherplatz im Transaktionsprotokoll, um sicherzustellen, dass ausreichend Speicherplatz vorhanden ist, um einen Rollback infolge einer expliziten Rollback-Anweisung oder im Falle eines Fehlers zu unterstützen. Der Umfang des reservierten Speicherplatzes hängt von den im Rahmen der Transaktion durchgeführten Operationen ab, entspricht jedoch im Allgemeinen dem Umfang des Speicherplatzes, der zum Protokollieren der einzelnen Operation verwendet wird. Dieser reservierte Speicherplatz wird freigegeben, sobald die Transaktion abgeschlossen ist.

Der Abschnitt der Protokolldatei vom ersten Protokolleintrag, der für einen erfolgreichen Rollback der gesamten Datenbank benötigt wird, bis zum zuletzt geschriebenen Protokolleintrag, wird als der aktive Teil des Protokolls bzw. als aktives Protokoll bezeichnet. Dies ist der Abschnitt des Protokolls, der für eine vollständige Wiederherstellung der Datenbank erforderlich ist. Vom aktiven Teil des Protokolls kann niemals ein Teil abgeschnitten werden.