SQL Server の復旧モデルとトランザクション ログ

SQL Server でのトランザクション ログの内部動作は、データベースの「復旧モデル」の設定によって変化します。復旧モデルには、「完全」、「一括ログ」、「単純」の 3種類があり、現在の復旧モデルを確認/変更するには、次のように操作して、データベースのプロパティを開きます。


SQL ステートメントを使用して復旧モデルを設定したい場合は、ALTER DATABASE ステートメントを次のように実行します。

USE master
ALTER DATABASE データベース名
 SET RECOVERY { FULL | BULK_LOGGED | SIMPLE }

3つの復旧モデルの違いは、次のとおりです。


■ 完全(Full)モデル
完全モデルは、トランザクション ログへすべての処理履歴を完全に記録するモデルです。これは、Standard Edition 以上のデフォルトの復旧モデルです。このモデルでは、障害発生時に障害が発生した直前までデータを復旧することができます。また、時刻を指定した復旧も可能で、ほとんどの環境で最適なモデルです。


■ 一括ログ(Bulk Logged)モデル
一括ログ モデルは、一括(bulk:バルク)操作(インデックスの作成や再構築、bcp コマンド、BULK INSERT ステートメント、Integration Services パッケージ、SELECT INTO、INSERT INTO など)のパフォーマンスを向上するために、トランザクション ログへ記録する情報を最小限に抑えるモデルです(この動作は、最小ログ記録とも呼ばれます)。
しかし、ログへ記録される情報が少なくなるということは、障害発生時に一部の操作の復旧ができない可能性があることを意味します。また、このモデルでは、時刻を指定した復旧もできません。障害復旧よりも一括操作のパフォーマンス向上を重視したい場合には、このモデルを使用します。


■ 単純(Simple)モデル
単純モデルは、SQL Server 7.0 以前のバージョンでは「チェックポイント時のログ切り捨て」(trunc. log on chkpt)と呼ばれていました。その名のとおり、チェックポイントが完了するごとに、現在実行されているトランザクションを除いて、トランザクション ログを切り捨てます。これによって、トランザクション ログの使用領域を最小に抑えて、ログの肥大化を防ぐことができます。
このモデルでも、自動復旧機能は正常に動作しますが、障害発生時に障害が発生した直前までデータを復旧することはできません。また、トランザクション ログのバックアップも実行することができません。したがって、開発時などディスク領域を節約したい場合や、障害時にバックアップを取得した時点までの復元ができれば良い場合にのみ利用するようにします。