障害発生後にログの更新後情報を使ってコミット済みの内容を復元する回復処理。
ロールフォワード(前進復旧)とは、障害が起きたあと、バックアップを起点にして、ログ(=処理の記録)に残した更新後の情報を使い、コミット済みの最新状態まで復元する回復処理のことです。時間を「前へ」進めるように復旧するので前進復旧と呼びます。
身近な例で考えると、ゲームのセーブデータと操作履歴に似ています。少し前のセーブデータ(=バックアップ)から再開し、そのあとの操作履歴(=ログ)を順番にやり直せば、ゲームオーバーした直前の場面まで戻せます。最初からやり直す必要はありません。
上のツールで▶ボタンを押すと、バックアップを取ってから更新が進み、ディスク障害が起きたあと、バックアップ+ログで最新の1800円まで前進復旧する流れを確認できます。
ロールフォワードは、次の手順で進めます。バックアップで途中まで戻し、ログで残りを前へ進める、という2段構えがポイントです。
・① バックアップから復元:障害で壊れたDBに、保存しておいたバックアップ(例:残高1000円)を書き戻す
・② ログの更新後情報を順に適用:バックアップ以降の更新を、ログに残した「更新後の値」で古いものから順に上書きする(1000円→1500円→1800円)
・③ コミット済みの最新状態へ:すべての更新後情報を適用し終えると、障害直前の状態に戻る
ここで使うのは「更新後情報(after image)=更新したあとの新しい値」です。これを順番に当てはめていくことで、データベースを「前へ前へ」と最新状態まで進めます。バックアップだけでは取得時点までしか戻せませんが、ログを組み合わせることで障害直前まで取り戻せるわけです。上のツールで、ログの2件が順に適用され値が増えていく様子を確認してみてください。
ロールフォワードは、おもに ディスク(媒体)が物理的に壊れて、データベース本体が読めなくなったとき に使います。コミット済みの内容を、バックアップとログから取り戻すための仕組みです。
よく対比されるのが ロールバック(後退復旧) です。これは反対方向の回復処理で、更新前情報(before image)=更新する前の古い値を使い、未完了のトランザクションを取り消して元に戻します。2つの違いを整理すると次のとおりです。
| 項目 | ロールフォワード | ロールバック |
|---|---|---|
| 方向 | 前進(最新へ進める) | 後退(過去へ戻す) |
| 使う情報 | 更新後情報(after) | 更新前情報(before) |
| 主な場面 | ディスク故障 | 処理の異常終了 |
つまり、ディスクが壊れたらロールフォワードで前へ、処理が途中で失敗したらロールバックで後ろへ、と覚えると整理しやすいです。どちらもログを活用してデータベースを正しい状態に戻す、信頼性を支える大切な仕組みです。