応用情報技術者 2015年 秋期 午前2 問30
問題文
チェックポイントを取得する DBMS において、図のような時間経過でシステム障害が発生した。前進復帰 (ロールフォワード)によって障害回復できるトランザクションだけを全て挙げたものはどれか。

選択肢
ア:T1
イ:T2とT3
ウ:T4とT5(正解)
エ:T5
🔒 解説は解答すると表示されます
前進復帰の対象判定【午前2解説】
正解の理由
前進復帰(ロールフォワード)は「チェックポイント時点でまだデータベースに反映されておらず、かつ障害発生前にコミット済み」のトランザクションに対して、ログの情報を使って処理を再適用(redo)する手続きです。図において、コミット時刻がチェックポイントと障害発生の間にあり、障害時点でコミット済みであったのは T4 と T5 です。したがって、これらを前進復帰の対象として復旧できるため、選択肢の ウ が正解になります。
(補足)T1 はチェックポイント以前に開始・コミット済みであり、チェックポイント時点で既にデータベースに反映されているため通常はredo不要、T2 と T3 は障害時点で未コミットなのでredoではなく取り消し(undo)の対象となります。
解法ステップ
- 図のチェックポイント位置と障害発生位置を確認する。
- 各トランザクションについて「コミットの有無」と「コミット時刻がチェックポイントの前後どちらか」「障害時点でコミット済みか」を判定する。
- ロールフォワードの判定基準を適用する:
- 前進復帰(redo)できるのは「障害時にコミット済みで、コミット記録がチェックポイント以降にある(=チェックポイント時点でまだデータベースに反映されていない可能性がある)」トランザクション。
- 判定を各トランザクションへ適用し、該当するものを列挙する(この問題では T4 と T5)。
選択肢別の誤答解説
- ア: T1
- 誤り。T1 はコミットがチェックポイントより前に完了しており、チェックポイント時点でデータベースに反映済みと想定されるため redo の対象ではない。
- イ: T2とT3
- 誤り。T2 はチェックポイントをまたいで実行中で未コミット、T3 はチェックポイント後に開始して未コミット。いずれも障害時に未コミットのため、redo ではなく undo の対象。
- ウ: T4とT5
- 正解。両者とも開始はチェックポイント前に見えるが、コミットはチェックポイント後かつ障害前に行われているため、前進復帰で再適用可能。
- エ: T5
- 誤り。T5 は確かに対象だが、同様の条件を満たす T4 も含まれるため不完全。
よくある誤解
- 「トランザクションがチェックポイント後に開始したかどうか」が前進復帰の第一条件と思う誤解。実際には重要なのはコミット時刻がチェックポイント以降かどうかであり、開始時刻そのものは redo 判定の必要条件ではない。
- 「コミット済み=常にデータベースへ反映済み」と考える誤解。コミットはログへの記録と永続化を意味するが、チェックポイント以降にコミットされた更新がデータファイルへ書き込まれていないことがあり、これが redo の対象となる。
- 「未コミットトランザクションは redo できる」との誤解。未コミットは一貫性維持のため undo(取り消し)されるべきで、redo してはいけない。
補足コラム
- チェックポイントは一般に「現在のログ位置(LSN)と、まだ書き戻されていないダーティページやアクティブトランザクション一覧」を記録します。復旧時はチェックポイント以降のログを参照して、redo(コミット済みだがデータ反映漏れの処理を再適用)と、undo(未コミットの取り消し)を行います。
- 用語整理:WAL(Write-Ahead Logging)により「変更内容のログが先に永続化」されるため、障害後はログを頼りに整合性を回復できます。実運用では「fuzzy checkpoint(漸進チェックポイント)」が使われ、チェックポイント時点におけるコミットログの有無で判断します。
FAQ
Q1: もしコミット時刻がちょうどチェックポイントの記録時刻と同じならどう判定するか?
A1: 実装次第だが原則として「コミットログがチェックポイント記録より先に安定化(永続化)しているか」を基準にします。チェックポイント記録にコミットログが含まれていれば redo 不要、含まれていなければ redo 対象になります。
A1: 実装次第だが原則として「コミットログがチェックポイント記録より先に安定化(永続化)しているか」を基準にします。チェックポイント記録にコミットログが含まれていれば redo 不要、含まれていなければ redo 対象になります。
Q2: T1 のようにチェックポイント以前にコミット済みでも、データファイルに未反映の可能性はないのか?
A2: チェックポイント以前にコミットが完了している場合、チェックポイント時にその変更がディスクへ書き戻されることを期待するため通常は redo 不要です。特殊な実装や故障条件を除けば、チェックポイント以前のコミットは安全とみなされます。
A2: チェックポイント以前にコミットが完了している場合、チェックポイント時にその変更がディスクへ書き戻されることを期待するため通常は redo 不要です。特殊な実装や故障条件を除けば、チェックポイント以前のコミットは安全とみなされます。
Q3: 未コミットだったトランザクションはどう回復される?
A3: 未コミットは復旧時に undo(ログを逆順に辿って変更を打ち消す)され、データベースの一貫性を保ちます。
A3: 未コミットは復旧時に undo(ログを逆順に辿って変更を打ち消す)され、データベースの一貫性を保ちます。
関連キーワード: ロールフォワード, チェックポイント, 前進復帰, ログベース復旧, WAL, コミット時刻, undo, redo

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

