データベースの更新履歴を記録し障害回復に用いるファイル。
ログファイルとは、データベースの更新履歴を記録し、障害回復に用いるファイルです。「いつ・どのトランザクションが・どのデータを・どう変えたか」を、起きた順に追記していきます。
ログファイルは、電源が切れても消えないディスク上に保存されます。万一システムが停止しても、このログをたどれば「どこまで進んでいたか」を再現できるため、データを正しい状態に戻せます。
身近な例で考えると、銀行の通帳のようなものです。残高そのもの(データ本体)が分からなくなっても、「○月○日に1万円引き出し」といった記録(ログ)が残っていれば、正しい残高を計算し直せます。上の図解で、1つの更新が更新前ログと更新後ログとして残る様子を確認できます。
ログには、1つの更新について「変える前の値」と「変えた後の値」の両方が記録されます。これを更新前ログ・更新後ログと呼びます。
・更新前ログ(before image):変更する前の古い値(例: 残高 300)
・更新後ログ(after image):変更した後の新しい値(例: 残高 200)
この2種類は、障害回復のときに使い分けられます。
・ロールバック(取り消し):未確定のまま障害が起きたとき、更新前ログを使って古い値に戻す
・ロールフォワード(やり直し):確定済みなのにディスク本体へ未反映だったとき、更新後ログを使って新しい値を再適用する
覚え方は、「前に戻したいなら更新前ログ、先に進めたいなら更新後ログ」です。上の図解の下段で、どちらのログがどちらの回復に使われるかを色で対応させています。
WAL(Write Ahead Log=ログ先書き)とは、データ本体を書き換える前に、必ずその更新内容をログへ書き出しておくという考え方です。順番を「ログが先、データが後」と決めるのがポイントです。
なぜ先にログを書くのでしょうか。もしデータ本体を更新している最中に障害が起きても、ログがすでに残っていれば、そこから回復できるからです。逆にログより先にデータを書いてしまうと、ログがない更新が生まれ、回復できなくなる恐れがあります。
身近な例で考えると、料理の前にレシピをメモしておくようなものです。先に手順を書き留めておけば、途中で中断しても「どこまでやったか」をたどって再開できます。WALは、トランザクションの永続性を支える基本の仕組みです。