Устранение неполадок при переполнении журнала транзакций (ошибка SQL Server 9002)Troubleshoot a Full Transaction Log (SQL Server Error 9002)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

В этом разделе описаны возможные действия при переполнении журнала транзакций, а также советы о том, как его избежать.This topic discusses possible responses to a full transaction log and suggests how to avoid it in the future.

Когда журнал транзакций переполняется, в компоненте Компонент SQL Server Database EngineSQL Server Database Engine происходит ошибка 9002.When the transaction log becomes full, Компонент SQL Server Database EngineSQL Server Database Engine issues a 9002 error. Журнал может заполниться, когда база данных работает в режиме "в сети" или находится в процессе восстановления.The log can fill when the database is online, or in recovery. Если журнал переполняется при подключенной базе данных, она не отключается, но переходит в режим только для чтения.If the log fills while the database is online, the database remains online but can only be read, not updated. Если журнал заполняется, когда база данных находится в процессе восстановления, компонент Компонент Database EngineDatabase Engine помечает базу данных как RESOURCE PENDING.If the log fills during recovery, the Компонент Database EngineDatabase Engine marks the database as RESOURCE PENDING. В любом случае необходимо вмешательство пользователя, чтобы сделать журнал транзакций доступным.In either case, user action is required to make log space available.

Действия при переполнении журнала транзакцийResponding to a full transaction log

Ответные действия при переполнении журнала транзакций частично зависят от условий, которые вызвали переполнение журнала.The appropriate response to a full transaction log depends partly on what condition or conditions caused the log to fill.

Чтобы определить, что препятствует усечению журнала транзакций в конкретном случае, используйте столбцы log_reuse_wait и log_reuse_wait_desc представления каталога sys.database.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. Дополнительные сведения см. в разделе sys.databases (Transact-SQL).For more information, see sys.databases (Transact-SQL). Описание причин, которые могут задержать усечение журнала, см. в разделе Журнал транзакций (SQL Server).For descriptions of factors that can delay log truncation, see The Transaction Log (SQL Server).

Важно!

Если при возникновении ошибки 9002 база данных находилась в состоянии восстановления, то после устранения проблемы восстановите базу данных с помощью инструкции ALTER DATABASE имя_базы_данных SET ONLINE.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.

При переполнении журнала транзакций предусмотрены следующие ответные действия:Alternatives for responding to a full transaction log include:

  • создание резервной копии журнала;Backing up the log.

  • освобождение места на диске, чтобы журнал мог автоматически расти;Freeing disk space so that the log can automatically grow.

  • перемещение файла журнала на диск с достаточным объемом свободного места;Moving the log file to a disk drive with sufficient space.

  • увеличение размера файла журнала;Increasing the size of a log file.

  • добавление файла журнала на другой диск;Adding a log file on a different disk.

  • завершение или уничтожение длительной транзакции.Completing or killing a long-running transaction.

Эти возможности описаны в следующих разделах.These alternatives are discussed in the following sections. Выберите ответное действие, наиболее подходящее в конкретной ситуации.Choose a response that fits your situation best.

Резервное копирование журналаBack up the log

Для полных моделей восстановления и моделей с неполным протоколированием резервное копирование может предотвратить усечение журнала транзакций, если оно не было сделано недавно.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. Если резервная копия журнала создается в первый раз, следует сделать вторую резервную копию журнала , чтобы разрешить компоненту Компонент Database EngineDatabase Engine усечение журнала до точки последнего резервного копирования.If the log has never been backed up, you must create two log backups to permit the Компонент Database EngineDatabase Engine to truncate the log to the point of the last backup. Усечение журнала освобождает пространство для новых записей журнала.Truncating the log frees space for new log records. Чтобы избежать повторного переполнения журнала, следует чаще выполнять резервное копирование.To keep the log from filling up again, take log backups frequently.

Создание резервной копии журнала транзакцийTo create a transaction log backup

Важно!

Если база данных повреждена, см. раздел Резервные копии заключительного фрагмента журнала (SQL Server).If the database is damaged, see Tail-Log Backups (SQL Server).

Освобождение места на дискеFreeing disk space

Возможно, следует освободить место на диске, где находится файл журнала транзакций для базы данных. Для этого можно удалить или переместить другие файлы.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. Освобожденное место на диске позволит системе восстановления автоматически увеличить размер файла журнала.The freed disk space allows the recovery system to enlarge the log file automatically.

Перемещение файла журнала на другой дискMove the log file to a different disk

Если на текущем диске невозможно освободить достаточное количество места, следует переместить файл на другой диск, где места достаточно.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.

Важно!

Файлы журнала ни в коем случае не следует размещать в файловых системах со сжатием.Log files should never be placed on compressed file systems.

Перемещение файла журналаMove a log file

Увеличение размера файла журналаIncrease log file size

Если на диске, на котором находится журнал, доступно свободное место, можно увеличить размер файла журнала.If space is available on the log disk, you can increase the size of the log file. Максимальный объем файлов журнала составляет 2 терабайта (ТБ) на файл журнала.The maximum size for log files is two terabytes (TB) per log file.

Увеличение размера файлаIncrease the file size

Если автоувеличение отключено, база данных находится в режиме «в сети» и на диске достаточно свободного места, выполните одно из следующих действий.If autogrow is disabled, the database is online, and sufficient space is available on the disk, either:

  • Вручную увеличьте размер файла для получения одного шага роста размера файла.Manually increase the file size to produce a single growth increment.

  • Включить свойство автоматического увеличения при помощи инструкции ALTER DATABASE, чтобы установить отличное от нуля значение шага роста для параметра FILEGROWTH.Turn on autogrow by using the ALTER DATABASE statement to set a non-zero growth increment for the FILEGROWTH option.

Примечание

В любом случае, если достигнут текущий предел размера файла, увеличьте значение MAXSIZE.In either case, if the current size limit has been reached, increase the MAXSIZE value.

Добавление файла журнала на другой дискAdd a log file on a different disk

Добавьте новый файл журнала базы данных на другом диске, где достаточно места, с помощью инструкции ALTER DATABASE <имя_базы_данных> ADD LOG FILE.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.

Добавление файла журналаAdd a log file

Завершение длительной транзакцииComplete or kill a long-running transaction

Обнаружение длительных транзакцийDiscovering long-running transactions

Очень длительная транзакция может привести к переполнению журнала транзакций.A very long-running transaction can cause the transaction log to fill. Длительные транзакции можно обнаружить следующими способами:To look for long-running transactions, use one of the following:

Завершение транзакцииKill a transaction

В некоторых случаях может потребоваться завершить процесс, для этого можно применить инструкцию KILL .Sometimes you just have to end the process; you may have to use the KILL statement. Ее следует использовать с осторожностью, особенно если запущены критические процессы, которые нельзя завершать.Please use this statement very carefully, especially when critical processes are running that you don't want to kill. Дополнительные сведения см. в разделе KILL (Transact-SQL).For more information, see KILL (Transact-SQL)

См. также разделSee also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Управление размером файла журнала транзакций Manage the Size of the Transaction Log File
Резервные копии журналов транзакций (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)