Markierte Transaktionen [SQL Server]Deferred Transactions (SQL Server)

Dieses Thema gilt für: JaSQL ServerkeineAzure SQL-DatenbankkeineAzure SQL Data Warehouse keine Parallel DatawarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse In SQL ServerSQL 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. In SQL ServerSQL Server Enterprise, a corrupted transaction can become deferred if data required by rollback (undo) is offline during database startup. 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.A deferred transaction is a transaction that is uncommitted when the roll forward phase finishes and that has encountered an error that prevents it from being rolled back. Da kein Rollback ausgeführt werden kann, wird die Transaktion verzögert.Because the transaction cannot be rolled back, it is deferred.

Hinweis

Beschädigte Transaktionen werden nur in SQL ServerSQL Server Enterprise verzögert.Corrupted transactions are deferred only in SQL ServerSQL Server Enterprise. In anderen Editionen von SQL ServerSQL Serverkann eine beschädigte Transaktion nicht gestartet werden.In other editions of SQL ServerSQL Server, a corrupted transaction causes startup to fail.

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.Generally, a deferred transaction occurs because, while the database was being rolled forward, an I/O error prevented reading a page that was required by the transaction. Doch auch ein Fehler auf Dateiebene kann verzögerte Transaktionen zur Folge haben.However, an error at the file level can also cause deferred transactions. 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.A deferred transaction can also occur when a partial restore sequence stops at a point at which transaction rollback is necessary and a transaction requires data that is offline.

Bei Benutzertransaktionen, bei denen während des Rollbacks ein E/A-Fehler auftritt, wird die gesamte Datenbank in den Offlinezustand versetzt.User transactions that are rolling back and hit an I/O error cause the whole database to go offline. 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.When the database is brought back online, the redo reacquires all the locks it had and tries to roll back all the uncommitted transactions. Alle durch eine Transaktion geänderten Daten bleiben entsprechend gesperrt, bis für die Transaktion ein Rollback ausgeführt werden kann.All data modified by a transaction remains appropriately locked until the transaction can roll back. 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.Transactions that cannot be rolled back will give up their locks when the corruption is fixed and the database restarted or, after an online restore, when the deferred transactions are resolved while the database remains online. 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.Until that point, a deferred transaction can hold locks that prevent certain operations on the database as a whole. 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.For example, if a deferred transaction contains a CREATE TABLE instruction, no user can create a table until the deferred transaction has been resolved.

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.Deferred transaction can also occur because a piecemeal restore recovers a database to a point at which one or more active transactions are affecting a filegroup that has not yet been restored and is offline. Da kein Rollback ausgeführt werden kann, werden die Transaktionen verzögert.Because the transactions cannot be rolled back, they become deferred.

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.The following table lists the actions that cause a database to perform recovery and the outcome if an I/O problem occurs.

AktionAction Lösung (bei E/A-Fehlern oder wenn erforderliche Daten offline sind)Resolution (if I/O problems occur or required data is offline)
ServerstartServer start verzögerten TransaktionDeferred transaction
WiederherstellungRestore verzögerten TransaktionDeferred transaction
AnfügenAttach Anfügen erzeugt einen FehlerAttach fails
AutoNeustartAutorestart verzögerten TransaktionDeferred transaction
Erstellen einer Datenbank oder einer DatenbankmomentaufnahmeCreate database or database snapshot Erstellen erzeugt einen FehlerCreation fails
Wiederholen bei DatenbankspiegelungRedo on database mirroring verzögerten TransaktionDeferred transaction
Dateigruppe ist offlineFilegroup is offline verzögerten TransaktionDeferred transaction

Beenden des VERZÖGERTEN Zustands einer TransaktionMoving a Transaction Out of the DEFERRED State

Wichtig

Das Transaktionsprotokoll bleibt bei verzögerten Transaktionen aktiv.Deferred transactions keep the transaction log active. Eine virtuelle Protokolldatei, in der verzögerte Transaktionen enthalten sind, kann erst abgeschnitten werden, wenn sich diese Transaktionen nicht mehr im Verzögerungsmodus befinden.A virtual log file that contains any deferred transactions cannot be truncated until those transactions are moved out of the deferred state. Weitere Informationen zu Protokollkürzung finden Sie unter Das 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.To move the transaction out of the deferred state, the database must start cleanly without any I/O errors. Falls verzögerte Transaktionen vorhanden sind, müssen Sie die Ursache der E/A-Fehler beheben.If deferred transactions exist, you must fix the source of the I/O errors. Die verfügbaren Lösungen werden nachfolgend in der Reihenfolge aufgelistet, in der sie normalerweise versucht werden:The available solutions, listed in the order in which they are typically tried, are as follows:

  • Starten Sie die Datenbank neu.Restart the database. Wenn es sich um ein vorübergehendes Problem gehandelt hat, sollte die Datenbank ohne verzögerte Transaktionen gestartet werden.If the problem was transient, the database should start without deferred transactions.

  • Wenn die Transaktionen verzögert wurden, weil eine Dateigruppe offline war, schalten Sie die Dateigruppe wieder online.If the transactions were deferred because a filegroup was offline, bring the filegroup back online.

    Mithilfe der folgenden Transact-SQLTransact-SQL -Anweisung können Sie eine Offlinedateigruppe wieder in den Onlinezustand versetzen:To bring an offline filegroup back online, use the following Transact-SQLTransact-SQL statement:

    RESTORE DATABASE database_name FILEGROUP=<filegroup_name>  
    
  • Stellen Sie die Datenbank wieder her.Restore the database. Nach einer Onlinewiederherstellung werden alle verzögerten Transaktionen aufgelöst.After an online restore, any deferred transactions are resolved.

    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).Under the full or bulk-logged recovery model, if the deferred transactions were caused by only a few corrupted pages, an online page restore might resolve the errors (where supported).

  • Wenn keine Dateigruppe mehr erforderlich ist, deren Offlinestatus zu verzögerten Transaktionen führt, setzen Sie die offline geschaltete Dateigruppe außer Kraft.If you are no longer require a filegroup whose offline status is causing deferred transactions, make the offline filegroup defunct. 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.Transactions that were deferred because the filegroup was offline are moved out of the deferred state after the filegroup becomes defunct.

    Wichtig

    Eine außer Kraft gesetzte Dateigruppe kann nicht wiederhergestellt werden.A defunct filegroup can never be recovered.

    Weitere Informationen finden Sie unter Entfernen von veralteten Dateigruppen (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:If transactions were deferred because of a bad page and if a good backup of the database does not exist, use the following process to repair the database:

    • Versetzen Sie die Datenbank zunächst in den Notfallmodus. Führen Sie dazu die folgende Transact-SQLTransact-SQL -Anweisung aus:First put the database into emergency mode by executing the following Transact-SQLTransact-SQL statement:

      ALTER DATABASE <database_name> SET EMERGENCY  
      

      Informationen zum Notfallmodus finden Sie unter Database States.For information about emergency mode, see 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.Then, repair the database by using the DBCC REPAIR_ALLOW_DATA_LOSS option in one of the following DBCC statements: DBCC CHECKDB, DBCC CHECKALLOC, or DBCC CHECKTABLE.

      Sobald DBCC auf die beschädigte Seite stößt, wird ihre Zuordnung aufgehoben, und es werden alle damit verbundenen Fehler repariert.When DBCC encounters the bad page, DBCC deallocates it and repairs any related errors. Durch diesen Ansatz kann die Datenbank in einem physisch konsistenten Status wieder online geschaltet werden.This approach enables the database to be brought back online in a physically consistent state. Allerdings können dabei weitere Daten verloren gehen. Aus diesem Grund sollte dieser Ansatz nur als letzte Möglichkeit verwendet werden.However, additional data might also be lost; therefore, this approach should be used as a last resort.

Siehe auchSee Also

Übersicht über Wiederherstellungsvorgänge (SQL Server) Restore and Recovery Overview (SQL Server)
Entfernen von veralteten Dateigruppen (SQL Server) Remove Defunct Filegroups (SQL Server)
Dateiwiederherstellungen (vollständiges Wiederherstellungsmodell) File Restores (Full Recovery Model)
Dateiwiederherstellungen (einfaches Wiederherstellungsmodell) File Restores (Simple Recovery Model)
Wiederherstellung von Seiten (SQL Server) Restore Pages (SQL Server)
Schrittweise Wiederherstellungen (SQL Server) Piecemeal Restores (SQL Server)
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
RESTORE (Transact-SQL)RESTORE (Transact-SQL)