FE EXAM

ロールバックリカバリ(後退復旧)

障害発生後にログの更新前情報を使って未完了の処理を取り消す回復処理。

INTERACTIVE VISUALIZATION
コミット済み
未完了
取り消し
フェーズ
idle
障害
口座Aの値
口座A = 2000(T2の更新後)
シナリオ
ステップ1 / 6
STEP 1/6正常に稼働している状態2つのトランザクション(=ひとまとまりの処理)が走っています。T1は口座Aを1000→1500に更新してコミット(=確定)まで終え、T2はさらに1500→2000へ更新する処理の途中です。DBMSは処理のたびにログ(=更新の記録)へ「更新前の値」と「更新後の値」を書き残しています。
時間 →過去T1BEGINCOMMITT2BEGIN未完了
ログファイル(更新前情報つき)
T1 BEGIN(処理開始)
T1 UPDATE 口座A: 更新前=1000 → 更新後=1500
T1 COMMIT(確定)
T2 BEGIN(処理開始)
T2 UPDATE 口座A: 更新前=1500 → 更新後=2000
解説

📌
ロールバックリカバリとは

未完了のT2障害取り消し(巻き戻し)

ロールバックリカバリ(後退復旧)とは、障害が起きたとき、ログ(=更新の記録)に残った「更新前の値」を使って、まだ完了していない処理を取り消す回復方法のことです。トランザクション(=ひとまとまりの処理)が中途半端なまま止まってしまうと、データのつじつまが合わなくなります。そこで「やりかけは無かったことにする」のが基本の考え方です。

身近な例で考えると、下書き中の文書をうっかり閉じてしまったとき、保存前の編集を破棄して元の状態に戻すのに似ています。書きかけの内容(未完了の処理)は捨て、確定して保存した内容(コミット済みの処理)だけを残すイメージです。

上のツールで▶ボタンを押すと、障害発生から未完了のT2を見つけ出し、更新前の値で口座Aを巻き戻して整合性を取り戻す流れを順に確認できます。

📐
後退復旧の手順

ログを読む未完了を特定更新前で取消

後退復旧は、ログを手がかりに「取り消すべき処理」を見つけて元に戻すという流れで進みます。具体的な手順は次のとおりです。

① ログを読み返す:障害直前までのログを後ろから順にたどる
② 未完了を特定:BEGINはあるのにCOMMITが無いトランザクションを「未完了」と判定する
③ 更新前情報で取り消す:ログに残った「更新前の値」を使い、データを処理前の状態へ書き戻す(=アンドゥ)
④ コミット済みは保持:確定した処理はそのまま残し、巻き戻さない

ポイントは、更新「前」の値を使うという点です。ログには更新前と更新後の両方が記録されていますが、取り消すときに必要なのは「変える前はいくつだったか」という情報です。上のツールのログファイル表示で、強調された行が手がかりになっている様子を確認してみてください。

⚖️
ロールフォワードとの違い

障害点後退(取消)前進(再現)

ログを使った復旧には2つの向きがあります。ロールバック(後退復旧)は「時間を戻す」方向、ロールフォワード(前進復旧)は「時間を進める」方向です。どちらを使うかは、対象の処理がコミット済みかどうかで決まります。

項目ロールバックロールフォワード
別名後退復旧前進復旧
使う情報更新前情報更新後情報
対象未完了(コミット前)コミット済み
動き処理を取り消す処理を再現する

覚えかたとしては、「未完了は取り消す(後退)、コミット済みは取り戻す(前進)」と整理すると分かりやすいです。バックアップから復元したあと、その後にコミットされた処理を更新後情報で再現するのがロールフォワード、逆に途中で止まった処理を更新前情報で消すのがロールバック、という対の関係になっています。

練習問題

🎯
基本情報技術者 練習問題

Q1.ロールバックリカバリ(後退復旧)の説明として最も適切なものはどれか。
A.ログの更新後情報を使って、コミット済みの処理を再現する
B.ログの更新前情報を使って、未完了の処理を取り消す
C.バックアップを取得して定期的にDBを丸ごと保存する
D.複数サーバへデータを複製して可用性を高める
Q2.後退復旧で取り消す対象となるトランザクションはどれか。
A.障害発生時にコミット済みだったトランザクション
B.すべてのトランザクション
C.障害発生時にコミットしていなかった未完了トランザクション
D.読み取りだけを行ったトランザクション
Q3.ロールバックリカバリとロールフォワードの違いとして正しいものはどれか。
A.両者はまったく同じ復旧方法である
B.ロールバックは更新前情報で取り消し、ロールフォワードは更新後情報で再現する
C.ロールバックは更新後情報で再現し、ロールフォワードは更新前情報で取り消す
D.ロールフォワードはログを使わない

関連コンテンツ