Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
In SQL Server Enterprise kann eine beschädigte Transaktion verzögert werden, wenn für das Rollback (Rückgängig machen) erforderliche Daten während des Starts der Datenbank offline sind. Eine zurückgestellte Transaktion ist eine Transaktion, die beim Abschluss der Rollforward-Phase nicht festgeschrieben ist und bei der ein Fehler aufgetreten ist, der verhindert, dass sie zurückgesetzt 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 kann eine beschädigte Transaktion nicht gestartet werden.
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 kann eine verzögerte Transaktion Sperren halten, die bestimmte Vorgänge für die Datenbank als Ganzes verhindern. Wenn beispielsweise eine verzögerte Transaktion eine CREATE TABLE Anweisung enthält, kann kein Benutzer eine Tabelle erstellen, bis die verzögerte Transaktion aufgelöst wurde.
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 eine Datenbankwiederherstellung auslösen, sowie das Ergebnis, wenn ein E/A-Problem auftritt.
| Aktion | Lösung (bei E/A-Fehlern oder wenn erforderliche Daten offline sind) |
|---|---|
| Serverstart | Verzögerte Transaktion |
| Wiederherstellen | Verschobene Transaktion |
| Anfügen | Anfügen erzeugt einen Fehler |
| Automatischer Neustart | Verschobene Transaktion |
| Datenbank oder Datenbank-Snapshot erstellen | Erstellung fehlgeschlagen |
| Wiederholen bei Datenbankspiegelung | verzögerte Transaktion |
| Dateigruppe ist offline | Zurückgestellte 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 verzögert werden
Eine Transaktion aus dem Status DEFERRED herausführen
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 zur Protokollkürzung finden Sie unter Das Transaktionsprotokoll (SQL Server).
Um die Transaktion aus dem zurückgestellten Zustand zu holen, muss die Datenbank fehlerfrei und ohne E/A-Fehler starten. 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.
Mithilfe der folgenden Transact-SQL-Anweisung können Sie eine Offlinedateigruppe wieder in den Onlinezustand versetzen:
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 Entfernen von veralteten Dateigruppen (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:
Versetzen Sie die Datenbank zunächst in den Notfallmodus. Führen Sie dazu die folgende Transact-SQL-Anweisung aus:
ALTER DATABASE <database_name> SET EMERGENCYInformationen 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, hebt DBCC ihre Zuordnung auf und repariert alle damit verbundenen Fehler. 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.
Siehe auch
Übersicht über Wiederherstellungsvorgänge (SQL Server)
Entfernen von veralteten Dateigruppen (SQL Server)
Dateiwiederherstellungen (vollständiges Wiederherstellungsmodell)
Dateiwiederherstellungen (einfaches Wiederherstellungsmodell)
Wiederherstellung von Seiten (SQL Server)
Schrittweise Wiederherstellungen (SQL Server)
ALTER DATABASE (Transact-SQL)
RESTORE (Transact-SQL)