SQL Server でテーブルから多くのレコードを削除すると 「エラー 9002: トランザクション ログがいっぱいです。」 が発生しレコードの削除ができない - SQL Server

SQL Server でテーブルから多くのレコードを削除すると 「エラー 9002: トランザクション ログがいっぱいです。」 が発生しレコードの削除ができない現象について紹介します。

現象

1,000万レコードを超える大きなテーブルで、全体のレコード数の80%以上をDelele文で削除するなどすると、以下のエラーメッセージが表示されます。
エラー 9002: トランザクション ログがいっぱいです。
エラーが発生すると削除処理は途中で中断され、レコードの削除はされません。

原因

トランザクションログが肥大化し、ディスクの空き領域がなくなっている可能性があります。

対処法

以下の対処法があります。

対処法1: ディスクの増設

ディスクを増設し、トランザクションログが大きくなってもディスクフルにならないよう対策します。一方で大量のレコード削除はテーブルのロックを発生し一時的にデーターベースが使用不能になるなどの弊害も発生するため、一度に大量のレコードの削除を回避する方法も検討するのがお勧めです。

対処法2: 削除の分割

1度に多くのレコードを削除するとトランザクションログが肥大化するため、削除を分割して複数回のdeleteコマンドに分けられないかを検討します。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2019-01-04
作成日: 2019-01-03
iPentec all rights reserverd.