満杯になったトランザクション ログのトラブルシューティング (エラー 9002)
このトピックでは、トランザクション ログが満杯になった場合の対処法について説明し、今後トランザクション ログが満杯になるのを防ぐ方法を示します。トランザクション ログが満杯になると、SQL Server データベース エンジンから 9002 エラーが発行されます。データベースがオンラインまたは復旧中の場合、ログが満杯になることがあります。データベースがオンラインの時にログが満杯になると、データベースはオンラインのままですが、読み取り専用になり、更新できません。復旧中にログが満杯になった場合、データベース エンジンによりデータベースが RESOURCE PENDING としてマークされます。いずれの場合も、ログ領域を使用可能にするためのユーザー操作が必要です。
注 |
---|
一般に、トランザクション ログのディスク領域が足りなくなっても、読み取り専用モードでデータベースにアクセスできます。ただし、スナップショット分離レベルが有効である場合、ヒープ (クラスター化インデックスを使用しないテーブル) 上の行を削除して、非実体行のログ レコードが保存される前にトランザクション ログが満杯になると、データベースはオフラインになります。この場合、データベースは自動的に再起動し、完全復旧されて、オンラインになります。 |
トランザクション ログが満杯になった場合の対処法
トランザクション ログが満杯になった状況によっては、適切な対処法が異なる場合があります。特定の条件でログの切り捨てができなくなっている原因を見つけるには、sys.database カタログ ビューの log_reuse_wait 列と log_reuse_wait_desc 列を使用します。詳細については、「sys.databases (Transact-SQL)」を参照してください。ログの切り捨てが遅れる原因となるその他の要因の説明については、「ログの切り捨てが遅れる原因となる要因」を参照してください。
重要 |
---|
データベースの復旧中に 9002 エラーが発生した場合、問題を解決した後で ALTER DATABASE database_name SET ONLINE ステートメントを使用してデータベースを復旧します。 |
満杯になったトランザクション ログのその他の対処法には、以下があります。
ログをバックアップします。
ディスク領域を解放して、ログが自動的に拡張できるようにします。
十分な空き領域があるディスク ドライブにログ ファイルを移動します。
ログ ファイルのサイズを増やします。
別のディスクにログ ファイルを追加します。
実行時間の長いトランザクションを完了または強制終了します。
これらの対処法については、次のセクションで説明します。状況に最も適した対処法を選択してください。
ログのバックアップ
完全復旧モデルまたは一括ログ復旧モデルでは、トランザクション ログを長期間バックアップしていないと、バックアップによりログの切り捨てが妨げられる場合があります。これまでにログのバックアップをまったく行っていない場合は、2 つのログ バックアップを作成して、データベース エンジンが最後にバックアップされた時点までログを切り捨てられるようにする必要があります。ログを切り捨てると新しいログ レコード用の領域が解放されます。ログが再び満杯にならないようにするには、ログを頻繁にバックアップするようにしてください。
トランザクション ログのバックアップを作成するには
重要 |
---|
データベースが破損した場合は、「ログ末尾のバックアップ」を参照してください。 |
ディスク領域の解放
他のファイルを削除または移動することによって、データベースのトランザクション ログ ファイルが保存されているディスク ドライブのディスク領域を解放できる場合があります。ディスク領域を解放すると、ログ ファイルは自動的に拡張します。
別のディスクへのログ ファイルの移動
現在ログ ファイルが保存されているドライブでディスク領域を十分に解放できない場合は、十分な空き領域がある別のドライブにファイルを移動することを検討してください。
重要 |
---|
ログ ファイルは、圧縮されたファイル システムには配置しないでください。 |
ログ ファイルを移動するには
ログ ファイルのサイズの拡張
ログ ディスク上に使用可能な領域がある場合、ログ ファイルのサイズを増やすことができます。各ログ ファイルの最大サイズは、2 テラバイト (TB) です。
ファイル サイズを増やすには
自動拡張が無効に設定されており、データベースがオンラインで、ディスク上に十分な空き領域がある場合、次のいずれかを実行します。
ファイル サイズを手動で増やし、単一の拡張増分値を作成します。
ALTER DATABASE ステートメントを使用して自動拡張を有効にし、FILEGROWTH オプションに 0 以外の拡張増分値を設定します。
注 |
---|
いずれの場合も、現在のサイズ制限に達している場合は、MAXSIZE 値を増やします。 |
別のディスクへのログ ファイルの追加
ALTER DATABASE <database_name> ADD LOG FILE ステートメントを使用して、十分な領域がある別のディスク上のデータベースに新しいログ ファイルを追加します。
ログ ファイルを追加するには
実行時間の長いトランザクションの特定と管理
詳細については、「実行時間の長いトランザクションの管理」を参照してください。