Problembehandlung bei vollen Transaktionsprotokollen (SQL Server-Fehler 9002)Troubleshoot a Full Transaction Log (SQL Server Error 9002)

GILT FÜR: jaSQL Server neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema werden mögliche Lösungen für volle Transaktionsprotokolle erörtert und Vermeidungsstrategien vorgeschlagen.This topic discusses possible responses to a full transaction log and suggests how to avoid it in the future.

Wenn das Transaktionsprotokoll voll ist, wird von SQL Server-Datenbank-EngineSQL Server Database Engine der Fehler 9002ausgegeben.When the transaction log becomes full, SQL Server-Datenbank-EngineSQL Server Database Engine issues a 9002 error. Das Protokoll kann sich füllen, wenn die Datenbank online ist oder wiederhergestellt wird.The log can fill when the database is online, or in recovery. Wenn das Protokoll gefüllt wird, während die Datenbank online ist, bleibt die Datenbank online, sie kann aber nur gelesen und nicht aktualisiert werden.If the log fills while the database is online, the database remains online but can only be read, not updated. Wird das Protokoll während einer Wiederherstellung gefüllt, wird die Datenbank von Datenbank-EngineDatabase Engine als RESOURCE PENDING (ausstehende Ressource) markiert.If the log fills during recovery, the Datenbank-EngineDatabase Engine marks the database as RESOURCE PENDING. In beiden Fällen ist eine Aktion seitens des Benutzers erforderlich, um Speicherplatz im Protokoll verfügbar zu machen.In either case, user action is required to make log space available.

Mögliche Vorgehensweisen bei einem vollen TransaktionsprotokollResponding to a full transaction log

Die richtige Reaktion auf ein volles Transaktionsprotokoll hängt zum Teil davon ab, aufgrund welcher Bedingungen das Protokoll gefüllt wurde.The appropriate response to a full transaction log depends partly on what condition or conditions caused the log to fill.

Mithilfe der Spalten log_reuse_wait und log_reuse_wait_desc der sys.database-Katalogsicht können Sie feststellen, wodurch eine Protokollkürzung verhindert wurde.To discover what is preventing log truncation in a given case, use the log_reuse_wait and log_reuse_wait_desc columns of the sys.database catalog view. Weitere Informationen finden Sie unter sys.databases (Transact-SQL).For more information, see sys.databases (Transact-SQL). Eine Beschreibung von Faktoren, die eine Protokollkürzung verzögern können, finden Sie unter Das Transaktionsprotokoll (SQL Server).For descriptions of factors that can delay log truncation, see The Transaction Log (SQL Server).

WICHTIG!IMPORTANT!!
Wenn sich die Datenbank zu dem Zeitpunkt, als der Fehler 9002 auftrat, gerade im Wiederherstellungsmodus befand, müssen Sie nach Behebung des Problems die Datenbank mithilfe von ALTER DATABASE database_name SET ONLINE wiederherstellen.If the database was in recovery when the 9002 error occurred, after resolving the problem, recover the database by using ALTER DATABASE database_name SET ONLINE.

Alternativ sind als Reaktion auf ein volles Transaktionsprotokoll auch folgende Aktionen möglich:Alternatives for responding to a full transaction log include:

  • Sichern des Protokolls.Backing up the log.

  • Freigeben von Speicherplatz, damit das Protokoll automatisch vergrößert werden kann.Freeing disk space so that the log can automatically grow.

  • Verschieben der Protokolldatei auf einen Datenträger mit ausreichendem Speicherplatz.Moving the log file to a disk drive with sufficient space.

  • Vergrößern einer Protokolldatei.Increasing the size of a log file.

  • Hinzufügen einer Protokolldatei auf einem anderen Datenträger.Adding a log file on a different disk.

  • Abschließen oder Abbrechen einer Transaktion mit langer Ausführungszeit.Completing or killing a long-running transaction.

Diese Alternativen werden in den folgenden Abschnitten erläutert.These alternatives are discussed in the following sections. Wählen Sie diejenige Aktion aus, die sich am besten für Ihre Situation eignet.Choose a response that fits your situation best.

Sichern des ProtokollsBack up the log

Falls bei Verwendung des vollständigen oder massenprotokollierten Wiederherstellungsmodells das Transaktionsprotokoll nicht vor kurzem gesichert wurde, kann durch die Sicherung eine Protokollkürzung verhindert werden.Under the full recovery model or bulk-logged recovery model, if the transaction log has not been backed up recently, backup might be what is preventing log truncation. Wenn das Protokoll noch nie gesichert wurde, müssen Sie zwei Protokollsicherungen erstellen , damit das Protokoll von Datenbank-EngineDatabase Engine bis zu dem Punkt abgeschnitten werden kann, an dem die letzte Sicherung erfolgte.If the log has never been backed up, you must create two log backups to permit the Datenbank-EngineDatabase Engine to truncate the log to the point of the last backup. Durch Kürzen des Protokolls wird Speicherplatz für neue Protokolldatensätze freigegeben.Truncating the log frees space for new log records. Sichern Sie das Protokoll in kürzeren Abständen, damit es nicht wieder so schnell aufgefüllt wird.To keep the log from filling up again, take log backups frequently.

So erstellen Sie eine TransaktionsprotokollsicherungTo create a transaction log backup

WICHTIGIMPORTANT
Wenn die Datenbank beschädigt ist, gehen Sie unter Protokollfragmentsicherungen (SQL Server).If the database is damaged, see Tail-Log Backups (SQL Server).

Freigeben von SpeicherplatzFreeing disk space

Möglicherweise können Sie durch Löschen oder Verschieben anderer Dateien Speicherplatz auf dem Datenträger freigeben, das die Transaktionsprotokolldatei für die Datenbank enthält.You might be able to free disk space on the disk drive that contains the transaction log file for the database by deleting or moving other files. Aufgrund des freigegebenen Speicherplatzes kann die Protokolldatei dann durch den Wiederherstellungsmechanismus automatisch vergrößert werden.The freed disk space allows the recovery system to enlarge the log file automatically.

Verschieben der Protokolldatei auf einen anderen DatenträgerMove the log file to a different disk

Wenn Sie auf dem Datenträger, auf dem die Protokolldatei aktuell gespeichert ist, nicht genügend Speicherplatz freigeben können, können Sie die Datei auf einen anderen Datenträger mit ausreichendem Speicherplatz verschieben.If you cannot free enough disk space on the drive that currently contains the log file, consider moving the file to another drive with sufficient space.

WICHTIG!IMPORTANT!! Protokolldateien sollten unter keinen Umständen in komprimierten Dateisystemen gespeichert werden.Log files should never be placed on compressed file systems.

Verschieben einer ProtokolldateiMove a log file

Erhöhen der Größe der ProtokolldateiIncrease log file size

Wenn auf dem Protokolldatenträger Speicherplatz vorhanden ist, können Sie die Protokolldatei vergrößern.If space is available on the log disk, you can increase the size of the log file. Die maximale Größe für Protokolldateien beträgt zwei Terabyte (TB) pro Protokolldatei.The maximum size for log files is two terabytes (TB) per log file.

Erhöhen der DateigrößeIncrease the file size

Wenn die automatische Vergrößerung deaktiviert ist, die Datenbank online ist und auf dem Datenträger ausreichend Speicherplatz verfügbar ist, führen Sie einen der folgenden Schritte aus:If autogrow is disabled, the database is online, and sufficient space is available on the disk, either:

  • Erhöhen Sie die Dateigröße manuell, um die Datei einmalig um einen bestimmten Wert zu vergrößern.Manually increase the file size to produce a single growth increment.

  • Aktivieren Sie die automatische Vergrößerung, indem Sie mit der ALTER DATABASE-Anweisung für die Option FILEGROWTH ein Vergrößerungsinkrement ungleich Null festlegen.Turn on autogrow by using the ALTER DATABASE statement to set a non-zero growth increment for the FILEGROWTH option.

HINWEIS: Erhöhen Sie in beiden Fällen den MAXSIZE-Wert, wenn die aktuelle Größenbeschränkung erreicht wurde.NOTE In either case, if the current size limit has been reached, increase the MAXSIZE value.

Hinzufügen einer Protokolldatei auf einem anderen DatenträgerAdd a log file on a different disk

Fügen Sie der Datenbank mithilfe von ALTER DATABASE <database_name> ADD LOG FILE eine neue Protokolldatei auf einem anderen Datenträger hinzu, auf dem ausreichend Speicherplatz vorhanden ist.Add a new log file to the database on a different disk that has sufficient space by using ALTER DATABASE <database_name> ADD LOG FILE.

Hinzufügen einer ProtokolldateiAdd a log file

Abschließen oder Abbrechen einer Transaktion mit langer AusführungszeitComplete or kill a long-running transaction

Ermitteln von Transaktionen mit langer AusführungszeitDiscovering long-running transactions

Eine Transaktion mit sehr langer Ausführungszeit kann zum Auffüllen des Transaktionsprotokolls führen.A very long-running transaction can cause the transaction log to fill. Verwenden Sie eine der folgenden Optionen, um nach lang andauernden Transaktionen zu suchen:To look for long-running transactions, use one of the following:

Abbrechen einer TransaktionKill a transaction

Manchmal müssen Sie den Prozess einfach nur beenden. Möglicherweise müssen Sie dazu die KILL -Anweisung verwenden.Sometimes you just have to end the process; you may have to use the KILL statement. Verwenden Sie diese Anweisung jedoch sehr vorsichtig, besonders wenn gerade kritische Prozesse ausgeführt werden, die Sie nicht abbrechen möchten.Please use this statement very carefully, especially when critical processes are running that you don't want to kill. Weitere Informationen finden Sie unter KILL (Transact-SQL).For more information, see KILL (Transact-SQL)

Siehe auchSee also

KB-Supportartikel – Ein Transaktionsprotokoll wächst unerwartet in SQL Server oder wird voll ALTER DATABASE (Transact-SQL) KB support article - A transaction log grows unexpectedly or becomes full in SQL Server ALTER DATABASE (Transact-SQL)
Verwalten der Größe der Transaktionsprotokolldatei Manage the Size of the Transaction Log File
Transaktionsprotokollsicherungen (SQL Server) Transaction Log Backups (SQL Server)
sp_add_log_file_recover_suspect_db (Transact-SQL)sp_add_log_file_recover_suspect_db (Transact-SQL)