計算機科学、特に
データベース分野における
トランザクションログ(または
データベースログ、バイナリログとも呼ばれます)は、
データベース管理システム(DBMS)がACID特性(原子性、一貫性、独立性、
永続性)を保証するための操作履歴記録です。これは、システムクラッシュやハードウェア故障が発生した場合でも、
データベースの整合性を保つために不可欠なメカニズムです。
ログは通常、電源が途絶えてもデータを保持できる
補助記憶装置上のファイルに出力されます。DBMSが起動時に
データベースの不整合や異常終了を検出した場合、
トランザクションログを読み取り、以下の二つの主要な操作を行います。
1.
未完了またはロールバックされたトランザクションの取り消し: ログに記録された操作を基に、中断された
トランザクションによる変更を元に戻します。
2.
コミットされたがデータベースに反映されていない操作の再実行:
コミット済みの
トランザクションで、まだ
データベースに書き込まれていない変更を再度適用します。
これらの操作は、
データベースの原子性と
永続性を保証する上で不可欠です。
トランザクションログは、
データログとは目的が異なります。
データログは、操作履歴を人間が読みやすい形式で記録するのに対し、
トランザクションログは、DBMSが
データベースの復旧や整合性維持のために使用します。そのため、DBMSによっては
トランザクションログと
データログの両方を提供する場合があります。
トランザクションログは、以下のような構造を持っています。
ログシーケンス番号(LSN): ログレコードの一意な識別子です。通常、番号は単調増加する値が割り当てられ、ARIESのようなリカバリアルゴリズムで使用されます。
直前のLSN: 直前のログレコードへの参照で、
トランザクションログを連結リストのように構成します。
トランザクション番号: ログレコードを生成したデータベーストランザクションの識別子です。
種類: ログレコードの種類を表します。
すべてのログレコードは、これらの共通属性に加えて、操作の種類ごとに固有の属性を持ちます。以下に、一般的な
データベースで使用されるログレコードの種類とその属性について説明します。
更新レコード
更新レコードは、
データベースの更新(変更)操作を記録します。属性は以下の通りです。
ページ番号: 更新されたページの番号を示します。
長さと位置: ページ内で変更された領域を示します。
更新前および後イメージ: 変更された領域の更新前後の値です。データベースによっては、両方または片方のみを記録することがあります。
補償レコード
補償レコードは、更新操作のロールバックを記録します。各レコードは、独立した更新レコードを指し、以下の属性を持ちます。
Undo Next LSN: 補償処理が必要な次のログレコードのLSNを示します。
コミットレコードは、
トランザクションの
コミット操作を記録します。
アボートレコード
アボートレコードは、
トランザクションの
ロールバック操作を記録します。
チェックポイントレコード
チェックポイントレコードは、チェックポイント処理が完了したことを記録します。このレコードは、リカバリ処理の高速化に役立ちます。以下の属性を持ちます。
Redo LSN: チェックポイント以降最初に行われた変更操作のログレコードのLSNです。このレコード以降の処理は再実行が必要です。
Undo LSN: チェックポイント中に実行中だった
トランザクションが記録した最も古いログレコードのLSNです。このレコード以降の処理は補償が必要な可能性があります。
まとめ
トランザクションログは、
データベースシステムの信頼性と整合性を保つために不可欠な要素です。様々なログレコードを適切に管理し、障害からの復旧やデータの整合性を維持するために、
トランザクションログの構造と役割を理解することは非常に重要です。