SQL Server でのトランザクション ログが満杯の場合のエラー

SQL Server では、デフォルトでは、トランザクション ログは、ハード ディスクの空き容量がなくなるまで、またはファイルの最大サイズに達するまで、どんどん肥大化し続けます。

ディスクの空き領域がなくなって、トランザクション ログが満杯になった場合には、次のようにエラー 9002データベース 'XXX' のトランザクション ログがいっぱいです」が発生します。

このエラーは、満杯になった後のトランザクションの実行時に発生します(ログが満杯の状態では、それ以上トランザクションを実行することができません)。したがって、ログが満杯にならないようにトランザクション ログを管理しておくことは、SQL Server を利用する上で必須の作業になります。
トランザクション ログの肥大化を防止するには、次の 2つの方法があります。

  1. トランザクション ログを定期的にバックアップする
  2. 復旧モデルを「単純」にする

トランザクション ログのバックアップは、次のように BACKUP LOG ステートメントを利用して実行することができます。

BACKUP LOG sampleDB
 TO DISK = 'C:\log1.bak'

トランザクション ログのバックアップを実行すると、次のようにトランザクション ログの使用済み領域を切り捨てることができます。

ファイル サイズを縮小したい場合には DBCC SHRINKFILE コマンドを利用します(このコマンドの利用方法は、別途投稿します)。


なお、以前のバージョンでは、次のように TRUNCATE_ONLY オプションを利用すると、ログを切り捨てることができました。

BACKUP LOG データベース名
 WITH TRUNCATE_ONLY

SQL Server 2008 からは、このオプションは廃止されているので、ログを切り捨てるには、ログのバックアップを実行するか、「単純」復旧モデルを利用する必要があります。