トランザクション ログの論理アーキテクチャ
SQL Server のトランザクション ログは、論理的にはトランザクション ログが一続きのログ レコードから構成されているものとして機能します。それぞれのログ レコードは、LSN (ログ シーケンス番号) によって識別されます。新しい各ログ レコードは、ログの論理上の末尾に前レコードの LSN より大きな LSN を付けて書き込まれます。
ログ レコードは、作成された順で連続して保管されます。各ログ レコードにはトランザクション ID が含まれ、どのトランザクションについてのレコードかを示します。各トランザクションに関連付けられているログ レコードはすべて、逆方向のポインタを使用して連鎖的にリンクされており、これによってトランザクションのロールバックをスピードアップできます。
データ変更のログ レコードには、実行した論理操作の記録または変更したデータの前後のイメージの記録が行われます。前イメージは、操作が実行される前のデータのコピーです。後イメージは、操作を実行した後のデータのコピーです。
操作を復旧する手順は、ログ レコードの種類によって異なります。
論理操作が記録されている場合
論理操作をロールフォワードするには、その操作を再実行します。
論理操作をロールバックするには、逆の論理操作を実行します。
前後イメージが記録されている場合
操作をロールフォワードするには、後イメージを適用します。
操作をロールバックするには、前イメージを適用します。
トランザクション ログには各種の操作が記録されます。記録される操作には次のようなものがあります。
各トランザクションの開始および終了。
あらゆるデータ変更 (挿入、更新、または削除)。これには、システム ストアド プロシージャまたは DDL (データ定義言語) ステートメントによって、システム テーブルなどのテーブルに加えられた変更が含まれます。
エクステントおよびページのすべての割り当てと割り当て解除。
テーブルまたはインデックスの作成と削除。
ロールバック操作も記録されます。トランザクションごとにトランザクション ログの領域が予約されるので、明示的にロールバック ステートメントを実行したときやエラーが発生したときのロールバックに備え、十分なログ領域が確保されます。予約領域のサイズは、トランザクションで実行される操作によって変わりますが、一般には各操作を記録するために使用される領域のサイズと同じです。この予約領域は、トランザクションが完了したときに解放されます。
ログ ファイルの中で、データベース全体を正常にロールバックするために必要な最初のログ レコードから最後に書き込まれたログ レコードまでの部分を、ログのアクティブな部分、またはアクティブ ログといいます。これは、データベースの完全復旧を実行するのに必要なログのセクションです。アクティブなログの部分を切り捨てることはできません。