Freigeben über


Das Transaktionsprotokoll

Gilt für:SQL Server

Jede SQL Server-Datenbank verfügt über ein Transaktionsprotokoll, in dem alle Transaktionen sowie die Datenbankänderungen aufgezeichnet werden, die von den einzelnen Transaktionen vorgenommen werden.

Das Transaktionsprotokoll ist eine wichtige Komponente der Datenbank. Wenn ein Systemfehler auftritt, benötigen Sie dieses Protokoll, um Die Datenbank wieder in einen konsistenten Zustand zu versetzen.

Warnung

Dieses Protokoll sollten Sie nicht löschen oder verschieben, wenn Sie sich über die Auswirkungen dieses Vorgangs nicht vollständig im Klaren sind.

Informationen zur physischen und logischen Architektur des Transaktionsprotokolls finden Sie in der SQL Server-Transaktionsprotokollarchitektur und im Verwaltungshandbuch.

Tipp

Prüfpunkte erstellen bekannte gute Punkte, aus denen transaktionsprotokolle während der Datenbankwiederherstellung angewendet werden sollen. Weitere Informationen finden Sie unter Datenbankprüfpunkte (SQL Server).

Vom Transaktionsprotokoll unterstützte Operationen

Das Transaktionsprotokoll unterstützt die folgenden Vorgänge:

  • Wiederherstellen einzelner Transaktionen.
  • Wiederherstellen aller unvollständigen Transaktionen, wenn SQL Server gestartet wird.
  • Ausführen eines Rollforwards für eine wiederhergestellte Datenbank, Datei, Dateigruppe oder Seite bis zu dem Punkt, an dem der Fehler aufgetreten ist.
  • Unterstützen der Transaktionsreplikation.
  • Lösungen zur Unterstützung von Hochverfügbarkeit und Notfallwiederherstellung: AlwaysOn-Verfügbarkeitsgruppen, Datenbankspiegelung und Protokollversand.

Wiederherstellen einzelner Transaktionen

Wenn eine Anwendung eine ROLLBACK-Anweisung ausgibt oder die Datenbank-Engine einen Fehler erkennt (z.B. die unterbrochene Verbindung mit einem Client), wird anhand der Protokolldatensätze für die Änderungen, die von einer nicht abgeschlossenen Transaktion vorgenommen wurde, ein Rollback ausgeführt.

Wiederherstellen aller unvollständigen Transaktionen, wenn SQL Server gestartet wird

Wenn ein Server ausfällt, bleiben die Datenbanken möglicherweise in einem Status, in dem einige Änderungen nicht vom Puffercache in die Datendateien geschrieben wurden, einige Änderungen von unvollständigen Transaktionen jedoch bereits in den Datendateien vorgenommen wurden. Beim Starten einer Instanz von SQL Server wird eine Wiederherstellung aller Datenbanken ausgeführt. Für jede Änderung, die im Protokoll aufgezeichnet wurde und die möglicherweise nicht in die Datendateien geschrieben wurde, wird ein Rollforward ausgeführt. Für jede unvollständige Transaktion, die im Transaktionsprotokoll erkannt wird, wird anschließend ein Rollback ausgeführt, um sicherzustellen, dass die Integrität der Datenbank aufrechterhalten wird. Weitere Informationen finden Sie unter Übersicht über Wiederherstellung und Wiederherstellung (SQL Server).

Ausführen eines Rollforwards für eine wiederhergestellte Datenbank, Datei, Dateigruppe oder Seite bis zu dem Punkt, an dem der Fehler aufgetreten ist

Nach einem Hardwareverlust oder Datenträgerfehler, der sich auf die Datendateien auswirkt, können Sie die Datenbank so wiederherstellen, wie sie zum Zeitpunkt des Ausfalls vorlag. Sie stellen zuerst die letzte vollständige und die letzte differenzielle Datenbanksicherung und anschließend die nachfolgende Folge von Transaktionsprotokollsicherungen bis zu dem Punkt wieder her, an dem der Fehler aufgetreten ist.

Beim Wiederherstellen der einzelnen Protokollsicherungen übernimmt die Datenbank-Engine erneut sämtliche im Protokoll aufgezeichneten Änderungen, um für alle Transaktionen einen Rollforward auszuführen. Wenn die letzte Protokollsicherung wiederhergestellt wird, verwendet die Datenbank-Engine die Protokollinformationen, um einen Rollback aller Transaktionen durchzuführen, die zu diesem Zeitpunkt noch nicht abgeschlossen waren. Weitere Informationen finden Sie unter Übersicht über Wiederherstellung und Wiederherstellung (SQL Server).

Unterstützen der Transaktionsreplikation

Der Protokolllese-Agent überwacht das Transaktionsprotokoll jeder für die Transaktionsreplikation konfigurierten Datenbank und kopiert die für die Replikation markierten Transaktionen aus dem Transaktionsprotokoll in die Verteilungsdatenbank. Weitere Informationen finden Sie unter Funktionsweise der Transaktionsreplikation.

Unterstützen von Hochverfügbarkeits- und Notfallwiederherstellungslösungen

Standbyserverlösungen, AlwaysOn-Verfügbarkeitsgruppen, Datenbankspiegelung und Protokollversand hängen in großem Umfang vom Transaktionsprotokoll ab.

In einem Szenario mit Always On-Verfügbarkeitsgruppen wird jede Aktualisierung einer Datenbank auf dem primären Replikat sofort in den separaten Kopien der Datenbank auf allen sekundären Replikaten reproduziert. Das primäre Replikat sendet jeden Protokolldatensatz sofort an die sekundären Replikate, die die eingehenden Protokolldatensätze auf die Verfügbarkeitsdatenbanken anwenden und kontinuierlich einen Rollforward auf das Protokoll anwenden. Weitere Informationen finden Sie unter Always On-Failoverclusterinstanzen (SQL Server).

In einem Protokollversandszenario sendet der primäre Server die Transaktionsprotokollsicherungen der primären Datenbank an ein oder mehrere Ziele. Jeder sekundäre Server stellt die Protokollsicherungen in seiner lokalen sekundären Datenbank wieder her. Weitere Informationen finden Sie unter Informationen zum Protokollversand (SQL Server).

In einem Datenbankspiegelungsszenario wird jedes Update einer Datenbank (der Prinzipaldatenbank) sofort in einer separaten vollständigen Kopie der Datenbank (der Spiegeldatenbank) reproduziert. Die Prinzipalserverinstanz sendet jeden Protokolldatensatz sofort an die Spiegelserverinstanz, die die eingehenden Protokolldatensätze auf die Spiegeldatenbank anwendet, um kontinuierlich ein Rollforward dafür auszuführen. Weitere Informationen finden Sie unter Datenbankspiegelung (SQL Server).

Merkmale von Transaktionsprotokollen

Merkmale des SQL Server Datenbank-Engine-Transaktionsprotokolls:

  • Das Transaktionsprotokoll wird als eine separate oder mehrere Dateien in der Datenbank implementiert. Der Protokollcache wird separat vom Puffercache für Datenseiten verwaltet. Diese Trennung führt zu einfachem, schnellen und robusten Code innerhalb des SQL Server-Datenbankmoduls. Weitere Informationen finden Sie unter physische Architektur des Transaktionsprotokolls.

  • Das Format der Protokolldatensätze und -seiten muss nicht zwingend dem Format der Datenseiten entsprechen.

  • Das Transaktionsprotokoll kann in Form mehrerer Dateien implementiert werden. Sie können die Dateien so konfigurieren, dass sie automatisch erweitert werden, indem Sie den FILEGROWTH Wert für das Protokoll festlegen. Diese Konfiguration reduziert das Potenzial, im Transaktionsprotokoll nicht mehr Platz zu haben, wodurch gleichzeitig der Verwaltungsaufwand reduziert wird. Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL) Datei- und Dateigruppenoptionen.

  • Der Mechanismus zum erneuten Verwenden des freien Speicherplatzes in den Protokolldateien ist schnell und wirkt sich nur minimal auf den Transaktionsdurchsatz aus.

Informationen zur physischen und logischen Architektur des Transaktionsprotokolls finden Sie in der SQL Server-Transaktionsprotokollarchitektur und im Verwaltungshandbuch.

Kürzung des Transaktionsprotokolls

Durch das Kürzen des Protokolls wird in der Protokolldatei Speicherplatz freigegeben, der vom Transaktionsprotokoll erneut verwendet werden kann. Sie müssen regelmäßig das Transaktionsprotokoll abschneiden, damit es nicht den vorgesehenen Speicherplatz belegt. Verschiedene Faktoren können die Protokollkürzung verzögern, daher ist die Überwachung der Protokollgröße wichtig. Einige Vorgänge können minimal protokolliert werden, um deren Auswirkungen auf die Größe des Transaktionsprotokolls zu verringern.

Die Protokollkürzung löscht inaktive virtuelle Protokolldateien (VLFs) aus dem logischen Transaktionsprotokoll einer SQL Server-Datenbank, wobei Speicherplatz im logischen Protokoll für die Wiederverwendung durch das physische Transaktionsprotokoll freigegeben wird. Wird ein Transaktionsprotokoll nicht gekürzt, füllt sich dadurch der gesamte Speicherplatz des Datenträgers auf, der den zugehörigen physischen Protokolldateien zugeordnet ist.

Um zu vermeiden, dass nur noch wenig Speicherplatz vorhanden ist, erfolgt die Kürzung automatisch nach den folgenden Ereignissen, sofern die Protokollkürzung nicht aus bestimmten Gründen verzögert wird:

  • Unter dem einfachen Wiederherstellungsmodell, nach einem Prüfpunkt.

  • Unter dem vollständigen oder massenprotokollierten Wiederherstellungsmodell, wenn ein Prüfpunkt seit der vorherigen Sicherung ausgelöst wurde, erfolgt die Kürzung nach einer Protokollsicherung (sofern es sich nicht um eine Kopiesicherung handelt).

  • Wenn Sie zum ersten Mal eine Datenbank erstellen, die das vollständige Wiederherstellungsmodell verwendet, wird das Transaktionsprotokoll nach Bedarf wiederverwendet (ähnlich einer Datenbank mit dem einfachen Wiederherstellungsmodell), bis zum Zeitpunkt der Erstellung einer vollständigen Datenbanksicherung.

Weitere Informationen finden Sie unter Faktoren, die das Abschneiden von Protokollen später in diesem Artikel verzögern können.

Die Protokollkürzung verringert nicht die Größe einer physischen Protokolldatei. Sie müssen zum Reduzieren der physischen Größe einer physischen Protokolldatei die Protokolldatei verkleinern. Informationen zum Verkleinern der Größe der physischen Protokolldatei finden Sie unter Verwalten der Größe der Transaktionsprotokolldatei. Beachten Sie jedoch Faktoren, die das Abschneiden von Protokollen verzögern können. Wenn der Speicherplatz nach dem Verkleinern des Protokolls erneut benötigt wird, wird das Transaktionsprotokoll erneut vergrößert und führt dazu zu leistungseinbußen bei Protokollvergrößerungsvorgängen.

Faktoren, die die Protokollkürzung verzögern können

Wenn Protokolldatensätze lange aktiv bleiben, wird der Transaktionsprotokollabzug verzögert, und das Transaktionsprotokoll kann ausgefüllt werden, wie weiter oben in diesem Artikel beschrieben.

Wichtig

Informationen zum Reagieren auf ein vollständiges Transaktionsprotokoll finden Sie unter Problembehandlung für ein vollständiges Transaktionsprotokoll (SQL Server-Fehler 9002).

Das Abschneiden von Protokollen kann aus verschiedenen Gründen verzögert werden. Um zu erfahren, was das Abschneiden des Protokolls verhindert, fragen Sie die log_reuse_wait- und log_reuse_wait_desc-Spalten der sys.databases-Katalogsicht ab. In der folgenden Tabelle werden die Werte dieser Spalten beschrieben.

wert log_reuse_wait log_reuse_wait_desc Wert Beschreibung
0 NOTHING Es gibt derzeit eine oder mehrere wiederverwendbare virtuelle Protokolldateien (VLFs).
1 CHECKPOINT Seit dem letzten Abschneiden des Protokolls ist kein Prüfpunkt aufgetreten, oder der Leiter des Protokolls wurde noch nicht über eine virtuelle Protokolldatei (VLF) hinaus verschoben. (Alle Wiederherstellungsmodelle.)

Dieses Szenario ist ein Routinegrund für die Verzögerung des Protokollabkürzungs. Weitere Informationen finden Sie unter Datenbankprüfpunkte (SQL Server).
2 LOG_BACKUP Eine Protokollsicherung ist erforderlich, bevor das Transaktionsprotokoll gekürzt werden kann. (Nur Voll- oder Massenprotokoll-Wiederherstellungsmodelle.)

Bei Abschluss der nächsten Protokollsicherung wird möglicherweise ein Teil des Protokollspeicherplatzes zur Wiederverwendung freigegeben.
3 ACTIVE_BACKUP_OR_RESTORE Eine Datensicherung oder eine Wiederherstellung wird ausgeführt. (Alle Wiederherstellungsmodelle.)

Verhindert eine Datensicherung die Protokollkürzung, kann das unmittelbare Problem u. U. durch Abbrechen des Sicherungsvorgangs behoben werden.
4 ACTIVE_TRANSACTION Eine Transaktion ist aktiv (alle Wiederherstellungsmodelle):

Möglicherweise ist beim Starten der Protokollsicherung eine Transaktion mit langer Ausführungszeit vorhanden. In diesem Fall ist zum Freigeben von Speicherplatz möglicherweise eine weitere Protokollsicherung erforderlich. Lang laufende Transaktionen verhindern die Protokollkürzung bei allen Wiederherstellungsmodellen, einschließlich des einfachen Wiederherstellungsmodells, bei dem das Transaktionsprotokoll im allgemeinen bei jedem automatischen Prüfpunkt gekürzt wird.

Eine Transaktion wird verzögert. Eine verzögerte Transaktion ist tatsächlich eine aktive Transaktion, deren Rollback aufgrund einer nicht verfügbaren Ressource blockiert ist. Informationen zu den Ursachen für verzögerte Transaktionen und zum Verschieben aus dem verzögerten Zustand finden Sie unter "Verzögerte Transaktionen (SQL Server)".For information about the causes of deferred transactions and how to move them out of the deferred state, see Deferred transactions (SQL Server)

Lang andauernde Transaktionen können auch das Transaktionsprotokoll von tempdb füllen. tempdb wird implizit von Benutzertransaktionen für interne Objekte wie z. B. Arbeitstabellen zum Sortieren, Arbeitsdateien für Hashverfahren, Cursorarbeitstabellen und Zeilenversionsverwaltung verwendet. Selbst wenn die Benutzertransaktion nur das Lesen von Daten umfasst (SELECT-Abfragen), werden möglicherweise interne Objekte erstellt und unter Benutzertransaktionen verwendet. Anschließend kann das tempdb-Transaktionsprotokoll gefüllt werden.
5 DATABASE_MIRRORING Die Datenbankspiegelung wurde angehalten, oder im Modus für hohe Leistung befindet sich die Spiegeldatenbank deutlich hinter der Prinzipaldatenbank. (Nur vollständiges Wiederherstellungsmodell.)

Weitere Informationen finden Sie unter Datenbankspiegelung (SQL Server).
6 REPLICATION Während der Transaktionsreplikationen wurden für die Veröffentlichungen relevante Transaktionen noch immer nicht für die Verteilungsdatenbank bereitgestellt. (Nur vollständiges Wiederherstellungsmodell.)

Informationen zur Transaktionsreplikation finden Sie unter SQL Server-Replikation.
7 DATABASE_SNAPSHOT_CREATION Es wird eine Datenbankmomentaufnahme erstellt. (Alle Wiederherstellungsmodelle.)

Dies ist ein häufiger, im Allgemeinen jedoch nur kurz andauernder Grund für ein verzögertes Kürzen eines Protokolls.
8 LOG_SCAN Ein Protokollscan ist aufgetreten. (Alle Wiederherstellungsmodelle.)

Dies ist ein häufiger, im Allgemeinen jedoch nur kurz andauernder Grund für ein verzögertes Kürzen eines Protokolls.
9 AVAILABILITY_REPLICA Ein sekundäres Replikat einer Verfügbarkeitsgruppe wendet Transaktionsprotokoll-Datensätze dieser Datenbank auf eine zugehörige sekundäre Datenbank an. (Nur vollständiges Wiederherstellungsmodell.)

Weitere Informationen finden Sie unter Was sind Always On-Verfügbarkeitsgruppen?.
10 - Nur zur internen Verwendung
11 - Nur zur internen Verwendung
12 - Nur zur internen Verwendung
13 OLDEST_PAGE Ist eine Datenbank zur Verwendung von indirekten Prüfpunkten konfiguriert, ist die älteste Seite in der Datenbank u.U. älter als die Protokollfolgenummer (Log Sequence Number, LSN). In diesem Fall kann die älteste Seite das Abschneiden von Protokollen verzögern. (Alle Wiederherstellungsmodelle.)

Informationen zu indirekten Prüfpunkten finden Sie unter Datenbankprüfpunkte (SQL Server).
14 OTHER_TRANSIENT Dieser Wert wird derzeit nicht verwendet.
16 XTP_CHECKPOINT Es muss ein In-Memory OLTP-Prüfpunkt ausgeführt werden. Für speicheroptimierte Tabellen wird ein automatischer Prüfpunkt ausgeführt, wenn die Transaktionsprotokolldatei seit dem letzten Prüfpunkt größer als 1,5 GB wird. (Umfasst sowohl datenträgerbasierte als auch speicheroptimierte Tabellen.)

Weitere Informationen finden Sie unter Prüfpunktvorgang für speicheroptimierte Tabellen und Protokollierungs- und Prüfpunktprozess für speicheroptimierte Tabellen.

Vorgänge, für die eine minimale Protokollierung verfügbar ist

Die minimale Protokollierung umfasst nur die Protokollierung der Informationen, die zum Wiederherstellen der Transaktion erforderlich sind, ohne die Point-in-Time-Wiederherstellung zu unterstützen. In diesem Artikel werden die Vorgänge beschrieben, die minimal unter dem Massenprotokollierwiederherstellungsmodell protokolliert werden (und auch unter dem einfachen Wiederherstellungsmodell, außer wenn eine Sicherung ausgeführt wird).

Die minimale Protokollierung wird für speicheroptimierte Tabellen nicht unterstützt.

Unter dem vollständigen Wiederherstellungsmodellwerden alle Massenvorgänge vollständig protokolliert. Sie können die Protokollierung für eine Reihe von Massenvorgängen jedoch verringern, indem Sie die Datenbank bei Massenvorgängen vorübergehend in das massenprotokollierte Wiederherstellungsmodell schalten. Die minimale Protokollierung ist effizienter als die vollständige Protokollierung und senkt die Wahrscheinlichkeit, dass ein umfangreicher Massenvorgang den verfügbaren Transaktionsprotokoll-Speicherplatz während einer Massentransaktion auffüllt. Wenn die Datenbank bei Aktivierung der minimalen Protokollierung jedoch beschädigt wird oder verloren geht, können Sie die Datenbank nicht bis zu dem Punkt wiederherstellen, an dem der Fehler aufgetreten ist.

Die folgenden Vorgänge, die unter dem vollständigen Wiederherstellungsmodell vollständig protokolliert werden, werden unter dem einfachen und massenprotokollierten Wiederherstellungsmodell minimal protokolliert:

  • Massenimportvorgänge (bcp, BULK INSERT und INSERT). Weitere Informationen zur minimalen Protokollierung eines Massenimports in eine Tabelle finden Sie unter Prerequisites for Minimal Logging in Bulk Import.

    Wenn die Transaktionsreplikation aktiviert ist, BULK INSERT werden Vorgänge auch unter dem Massenwiederherstellungsmodell vollständig protokolliert.

  • SELECT – INTO-Klausel-Vorgänge.

    Wenn die Transaktionsreplikation aktiviert ist, SELECT INTO werden Vorgänge auch unter dem Massenwiederherstellungsmodell vollständig protokolliert.

  • Teilupdates von Datentypen für hohe Werte mithilfe der .WRITE-Klausel in der UPDATE-Anweisung beim Einfügen oder Anfügen neuer Daten. Die minimale Protokollierung wird nicht verwendet, wenn vorhandene Werte aktualisiert werden. Weitere Informationen zu Datentypen für hohe Werte finden Sie unter Datentypen.

  • WRITETEXT -Anweisung und UPDATETEXT -Anweisung beim Einfügen oder Anfügen neuer Daten an die Datentypspalten text, ntextund image . Die minimale Protokollierung wird nicht verwendet, wenn vorhandene Werte aktualisiert werden.

    Warnung

    Die WRITETEXT Anweisungen sind UPDATETEXT veraltet. Vermeiden Sie die Verwendung in neuen Anwendungen.

  • Wenn die Datenbank auf das einfache oder massenprotokolliert Wiederherstellungsmodell festgelegt ist, werden einige Index-DDL-Vorgänge minimal protokolliert, unabhängig davon, ob der Vorgang offline oder online ausgeführt wird. Die minimal protokollierten Indexvorgänge sind:

    • CREATE INDEX -Vorgänge (einschließlich indizierter Sichten).

    • ALTER INDEX REBUILD oder DBCC DBREINDEX-Vorgang.

      Indexbuildvorgänge verwenden minimale Protokollierung, können jedoch verzögert werden, wenn gleichzeitig eine Sicherung ausgeführt wird. Diese Verzögerung wird durch die Synchronisierungsanforderungen von minimal protokollierten Pufferpoolseiten verursacht, wenn Sie das einfache oder massenprotokolliert Wiederherstellungsmodell verwenden.

      Warnung

      Die DBCC DBREINDEX Anweisung ist veraltet. Vermeiden Sie die Verwendung in neuen Anwendungen.

    • Neuerstellungen neuer Heaps mit DROP INDEX (falls zutreffend). Indexseiten-Deallocation während eines DROP INDEX Vorgangs wird immer vollständig protokolliert.

Aufgabe Artikel
Verwalten des Transaktionsprotokolls Verwalten der Größe der Transaktionsprotokolldatei

Problembehandlung für ein vollständiges Transaktionsprotokoll (SQL Server-Fehler 9002)
Sichern des Transaktionsprotokolls (nur vollständiges Wiederherstellungsmodell) Sichern eines Transaktionsprotokolls

Sichern des Transaktionsprotokolls, wenn die Datenbank beschädigt ist (SQL Server)
Wiederherstellen von Transaktionsprotokollen (nur vollständiges Wiederherstellungsmodell) Wiederherstellen einer Transaktionsprotokollsicherung (SQL Server)