SQL Server でテーブルから多くのレコードを削除すると 「エラー 9002: トランザクション ログがいっぱいです。」 が発生しレコードの削除ができない現象について紹介します。
1,000万レコードを超える大きなテーブルで、全体のレコード数の80%以上をDelele文で削除するなどすると、以下のエラーメッセージが表示されます。
エラーが発生すると削除処理は途中で中断され、レコードの削除はされません。
トランザクションログが肥大化し、ディスクの空き領域がなくなっている可能性があります。
以下の対処法があります。
ディスクを増設し、トランザクションログが大きくなってもディスクフルにならないよう対策します。一方で大量のレコード削除はテーブルのロックを発生し一時的にデーターベースが使用不能になるなどの弊害も発生するため、一度に大量のレコードの削除を回避する方法も検討するのがお勧めです。
1度に多くのレコードを削除するとトランザクションログが肥大化するため、削除を分割して複数回のdeleteコマンドに分けられないかを検討します。