SQL Server でのトランザクション ログが満杯の場合のエラー
SQL Server では、デフォルトでは、トランザクション ログは、ハード ディスクの空き容量がなくなるまで、またはファイルの最大サイズに達するまで、どんどん肥大化し続けます。
ディスクの空き領域がなくなって、トランザクション ログが満杯になった場合には、次のようにエラー 9002「データベース 'XXX' のトランザクション ログがいっぱいです」が発生します。
このエラーは、満杯になった後のトランザクションの実行時に発生します(ログが満杯の状態では、それ以上トランザクションを実行することができません)。したがって、ログが満杯にならないようにトランザクション ログを管理しておくことは、SQL Server を利用する上で必須の作業になります。
トランザクション ログの肥大化を防止するには、次の 2つの方法があります。
- トランザクション ログを定期的にバックアップする
- 復旧モデルを「単純」にする
トランザクション ログのバックアップは、次のように BACKUP LOG ステートメントを利用して実行することができます。
BACKUP LOG sampleDB TO DISK = 'C:\log1.bak'
トランザクション ログのバックアップを実行すると、次のようにトランザクション ログの使用済み領域を切り捨てることができます。
ファイル サイズを縮小したい場合には DBCC SHRINKFILE コマンドを利用します(このコマンドの利用方法は、別途投稿します)。
なお、以前のバージョンでは、次のように TRUNCATE_ONLY オプションを利用すると、ログを切り捨てることができました。
BACKUP LOG データベース名
WITH TRUNCATE_ONLY
SQL Server 2008 からは、このオプションは廃止されているので、ログを切り捨てるには、ログのバックアップを実行するか、「単純」復旧モデルを利用する必要があります。