満杯になったトランザクション ログのトラブルシューティング (SQL Server エラー 9002)Troubleshoot a Full Transaction Log (SQL Server Error 9002)

このトピックでは、トランザクション ログが満杯になった場合の対処法について説明し、今後トランザクション ログが満杯になるのを防ぐ方法を示します。This topic discusses possible responses to a full transaction log and suggests how to avoid it in the future.

トランザクション ログが満杯になると、 SQL Server データベース エンジンSQL Server Database Engine から 9002 エラーが発行されます。When the transaction log becomes full, SQL Server データベース エンジンSQL 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 Engine によりデータベースが RESOURCE PENDING としてマークされます。If the log fills during recovery, the データベース エンジンDatabase 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.

特定の条件でログの切り捨てができなくなっている原因を見つけるには、sys.database カタログ ビューの log_reuse_wait 列と log_reuse_wait_desc 列を使用します。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).

重要!!IMPORTANT!!
データベースの復旧中に 9002 エラーが発生した場合、問題を解決した後で ALTER DATABASE database_name 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. これまでにログのバックアップをまったく行っていない場合は、 2 つのログ バックアップを作成 して、 データベース エンジンDatabase Engine が最後にバックアップされた時点までログを切り捨てられるようにする必要があります。If the log has never been backed up, you must create two log backups to permit the データベース エンジンDatabase 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

重要IMPORTANT
データベースが破損している場合、「ログ末尾のバックアップ (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.

重要!!IMPORTANT!! ログ ファイルは、圧縮されたファイル システムには配置しないでください。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 テラバイト (TB) です。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 オプションに 0 以外の拡張増分値を設定します。Turn on autogrow by using the ALTER DATABASE statement to set a non-zero growth increment for the FILEGROWTH option.

注: いずれの場合も、現在のサイズ制限に達している場合は、MAXSIZE 値を増やします。NOTE 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 ADD LOG FILE.

ログ ファイルの追加Add a log file

  • データベースに対するデータ ファイルまたはログ ファイルの追加Add Data or Log Files to a Database

    実行時間の長いトランザクションの完了または強制終了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

サポート技術情報の記事 - SQL Server を実行しているコンピュータでトランザクション ログのサイズが予期せず増大する、または、ログがいっぱいになる ALTER DATABASE (Transact-SQL) KB support article - A transaction log grows unexpectedly or becomes full in SQL Server 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)