トランザクションログ

トランザクションログとは



計算機科学、特にデータベース分野におけるトランザクションログ(またはデータベースログ、バイナリログとも呼ばれます)は、データベース管理システム(DBMS)がACID特性(原子性、一貫性、独立性、永続性)を保証するための操作履歴記録です。これは、システムクラッシュやハードウェア故障が発生した場合でも、データベースの整合性を保つために不可欠なメカニズムです。

ログは通常、電源が途絶えてもデータを保持できる補助記憶装置上のファイルに出力されます。DBMSが起動時にデータベースの不整合や異常終了を検出した場合、トランザクションログを読み取り、以下の二つの主要な操作を行います。

1. 未完了またはロールバックされたトランザクションの取り消し: ログに記録された操作を基に、中断されたトランザクションによる変更を元に戻します。
2. コミットされたがデータベースに反映されていない操作の再実行: コミット済みのトランザクションで、まだデータベースに書き込まれていない変更を再度適用します。

これらの操作は、データベースの原子性と永続性を保証する上で不可欠です。

トランザクションログは、データログとは目的が異なります。データログは、操作履歴を人間が読みやすい形式で記録するのに対し、トランザクションログは、DBMSがデータベースの復旧や整合性維持のために使用します。そのため、DBMSによってはトランザクションログとデータログの両方を提供する場合があります。

トランザクションログの構造



トランザクションログは、以下のような構造を持っています。

ログシーケンス番号(LSN): ログレコードの一意な識別子です。通常、番号は単調増加する値が割り当てられ、ARIESのようなリカバリアルゴリズムで使用されます。
直前のLSN: 直前のログレコードへの参照で、トランザクションログを連結リストのように構成します。
トランザクション番号: ログレコードを生成したデータベーストランザクションの識別子です。
種類: ログレコードの種類を表します。

すべてのログレコードは、これらの共通属性に加えて、操作の種類ごとに固有の属性を持ちます。以下に、一般的なデータベースで使用されるログレコードの種類とその属性について説明します。

更新レコード



更新レコードは、データベースの更新(変更)操作を記録します。属性は以下の通りです。

ページ番号: 更新されたページの番号を示します。
長さと位置: ページ内で変更された領域を示します。
更新前および後イメージ: 変更された領域の更新前後の値です。データベースによっては、両方または片方のみを記録することがあります。

補償レコード



補償レコードは、更新操作のロールバックを記録します。各レコードは、独立した更新レコードを指し、以下の属性を持ちます。

Undo Next LSN: 補償処理が必要な次のログレコードのLSNを示します。

コミットレコード



コミットレコードは、トランザクションコミット操作を記録します。

アボートレコード



アボートレコードは、トランザクションロールバック操作を記録します。

チェックポイントレコード



チェックポイントレコードは、チェックポイント処理が完了したことを記録します。このレコードは、リカバリ処理の高速化に役立ちます。以下の属性を持ちます。

Redo LSN: チェックポイント以降最初に行われた変更操作のログレコードのLSNです。このレコード以降の処理は再実行が必要です。
Undo LSN: チェックポイント中に実行中だったトランザクションが記録した最も古いログレコードのLSNです。このレコード以降の処理は補償が必要な可能性があります。

まとめ



トランザクションログは、データベースシステムの信頼性と整合性を保つために不可欠な要素です。様々なログレコードを適切に管理し、障害からの復旧やデータの整合性を維持するために、トランザクションログの構造と役割を理解することは非常に重要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。