Markierte Transaktionen (SQL Server)

Gilt für:SQL Server

In SQL Server Enterprise kann eine beschädigte Transaktion verzögert werden, wenn daten, die durch Rollback (Rückgängig) erforderlich sind, während des Datenbankstarts offline sind. Bei einer verzögerten Transaktion handelt es sich um eine Transaktion, für die kein Commit ausgeführt wird, wenn die Rollforwardphase beendet wird, und bei der ein Fehler auftritt, sodass für die Transaktion kein Rollback ausgeführt werden kann. Da kein Rollback ausgeführt werden kann, wird die Transaktion verzögert.

Hinweis

Beschädigte Transaktionen werden nur in SQL Server Enterprise zurückgestellt. In anderen Editionen von SQL Server führt eine beschädigte Transaktion dazu, dass der Start fehlschlägt.

Eine verzögerte Transaktion tritt normalerweise dann auf, wenn für eine Datenbank ein Rollforward ausgeführt wird und durch einen E/A-Fehler verhindert wird, dass eine Seite, die für die Transaktion erforderlich ist, gelesen werden kann. Doch auch ein Fehler auf Dateiebene kann verzögerte Transaktionen zur Folge haben. Eine verzögerte Transaktion kann auch auftreten, wenn eine Teilwiederherstellungssequenz an einem Punkt angehalten wird, an dem ein Transaktionsrollback erforderlich ist und für eine Transaktion Daten erforderlich sind, die offline sind.

Bei Benutzertransaktionen, bei denen während des Rollbacks ein E/A-Fehler auftritt, wird die gesamte Datenbank in den Offlinezustand versetzt. Wird die Datenbank zurück in den Onlinezustand versetzt, werden beim Wiederherstellungsvorgang alle vorherigen Sperren wiederhergestellt, und es wird versucht, für alle Transaktionen, für die kein Commit ausgeführt wurde, ein Rollback auszuführen. Alle durch eine Transaktion geänderten Daten bleiben entsprechend gesperrt, bis für die Transaktion ein Rollback ausgeführt werden kann. Für Transaktionen, für die kein Rollback ausgeführt werden kann, werden die Sperren freigegeben, sobald der Fehler behoben und die Datenbank neu gestartet wurde, oder nachdem eine Onlinewiederherstellung erfolgt, wenn die verzögerten Transaktionen gelöst werden, während die Datenbank online bleibt. Bis zu diesem Zeitpunkt können die Sperren von einer verzögerten Transaktion aufrecht erhalten werden, wodurch bestimmte Vorgänge in der gesamten Datenbank verhindert werden. Wenn eine verzögerte Transaktion beispielsweise eine CREATE TABLE-Anweisung enthält, können Benutzer Tabellen erst nach dem Auflösen der verzögerten Transaktion erstellen.

Eine verzögerte Transaktion kann auch auftreten, weil eine Datenbank mit einer schrittweisen Wiederherstellung bis zu einem Zeitpunkt wiederhergestellt wird, an dem sich eine oder mehrere aktive Transaktionen auf eine Dateigruppe auswirken, die bislang nicht wiederhergestellt wurde und offline ist. Da kein Rollback ausgeführt werden kann, werden die Transaktionen verzögert.

In der folgenden Tabelle sind die Aktionen aufgeführt, die einen Wiederherstellungsvorgang der Datenbank verursachen. Die Tabelle veranschaulicht außerdem das Ergebnis von E/A-Fehlern.

Aktion Lösung (bei E/A-Fehlern oder wenn erforderliche Daten offline sind)
Serverstart verzögerten Transaktion
Restore verzögerten Transaktion
Anfügen Anfügen erzeugt einen Fehler
AutoNeustart verzögerten Transaktion
Erstellen einer Datenbank oder einer Datenbankmomentaufnahme Erstellen erzeugt einen Fehler
Wiederholen bei Datenbankspiegelung verzögerten Transaktion
Dateigruppe ist offline verzögerten Transaktion

Anforderungen und Einschränkungen

  • Die Datenbank muss das FULL- oder BULK-LOGGED-Wiederherstellungsmodell verwenden.
  • Mindestens eine Datenbank- und Protokollsicherung muss für die Datenbank abgeschlossen sein.
  • Verzögerte Transaktionen gelten nicht als Fehler, die beim Rollback einer Transaktion auftreten, nachdem die Datenbank online ist (z. B. Laufzeitfehler).
  • Transaktionen können bei Wiederherstellungsfehlern während einer Datenbankanfügung nicht verzögert werden.
  • Einige Transaktionen wie Systemtransaktionen (z. B. Seitenzuweisung) können nicht zurückgestellt werden.

Beenden des VERZÖGERTEN Zustands einer Transaktion

Wichtig

Das Transaktionsprotokoll bleibt bei verzögerten Transaktionen aktiv. Eine virtuelle Protokolldatei, in der verzögerte Transaktionen enthalten sind, kann erst abgeschnitten werden, wenn sich diese Transaktionen nicht mehr im Verzögerungsmodus befinden. Weitere Informationen zum Abschneiden von Protokollen finden Sie im Transaktionsprotokoll (SQL Server).For more information about log truncation, see The Transaction Log (SQL Server).

Damit der verzögerte Zustand der Transaktion beendet wird, muss die Datenbank ordnungsgemäß und ohne E/A-Fehler gestartet werden. Falls verzögerte Transaktionen vorhanden sind, müssen Sie die Ursache der E/A-Fehler beheben. Die verfügbaren Lösungen werden nachfolgend in der Reihenfolge aufgelistet, in der sie normalerweise versucht werden:

  • Starten Sie die Datenbank neu. Wenn es sich um ein vorübergehendes Problem gehandelt hat, sollte die Datenbank ohne verzögerte Transaktionen gestartet werden.

  • Wenn die Transaktionen verzögert wurden, weil eine Dateigruppe offline war, schalten Sie die Dateigruppe wieder online.

    Verwenden Sie die folgende Transact-SQL-Anweisung, um eine Offlinedateigruppe wieder online zu schalten:

    RESTORE DATABASE database_name FILEGROUP=<filegroup_name>  
    
  • Stellen Sie die Datenbank wieder her. Nach einer Onlinewiederherstellung werden alle verzögerten Transaktionen aufgelöst.

    Wurden die verzögerten Transaktionen im Rahmen des Modells der vollständigen oder massenprotokollierten Wiederherstellung von einigen wenigen beschädigten Seiten verursacht, können die Fehler möglicherweise durch eine Onlinewiederherstellung der entsprechenden Seiten behoben werden (sofern diese unterstützt wird).

  • Wenn keine Dateigruppe mehr erforderlich ist, deren Offlinestatus zu verzögerten Transaktionen führt, setzen Sie die offline geschaltete Dateigruppe außer Kraft. Transaktionen, die sich verzögert haben, weil eine Dateigruppe offline ist, befinden sich, nachdem eine Dateigruppe außer Kraft gesetzt wird, nicht mehr im Verzögerungsmodus.

    Wichtig

    Eine außer Kraft gesetzte Dateigruppe kann nicht wiederhergestellt werden.

    Weitere Informationen finden Sie unter Remove Defunct Filegroups (SQL Server).For more information, see Remove Defunct Filegroups (SQL Server).

  • Wenn Transaktionen aufgrund einer beschädigten Seite verzögert wurden und keine gute Sicherung der Datenbank vorhanden ist, müssen Sie zum Reparieren der Datenbank wie folgt vorgehen:

    • Setzen Sie die Datenbank zuerst in den Notfallmodus, indem Sie die folgende Transact-SQL-Anweisung ausführen:

      ALTER DATABASE <database_name> SET EMERGENCY  
      

      Informationen zum Notfallmodus finden Sie unter Database States.

    • Reparieren Sie anschließend die Datenbank, indem Sie die Option DBCC REPAIR_ALLOW_DATA_LOSS in einer der folgenden DBCC-Anweisungen verwenden: DBCC CHECKDB, DBCC CHECKALLOCoder DBCC CHECKTABLE.

      Sobald DBCC auf die beschädigte Seite stößt, wird ihre Zuordnung aufgehoben, und es werden alle damit verbundenen Fehler repariert. Durch diesen Ansatz kann die Datenbank in einem physisch konsistenten Status wieder online geschaltet werden. Allerdings können dabei weitere Daten verloren gehen. Aus diesem Grund sollte dieser Ansatz nur als letzte Möglichkeit verwendet werden.

Weitere Informationen

Übersicht über Wiederherstellungsvorgänge (SQL Server)
Entfernen von veralteten Dateigruppen (SQL Server)
Dateiwiederherstellungen (vollständiges Wiederherstellungsmodell)
Dateiwiederherstellungen (einfaches Wiederherstellungsmodell)
Wiederherstellen von Seiten (SQL Server)
Stückwerkswiederherstellungen (SQL Server)
ALTER DATABASE (Transact-SQL)
RESTORE (Transact-SQL)