基本情報技術者 2009年 春期 午前(科目A) 問35
問題文
トランザクションTはチェックポイント取得後に完了し、その後にシステム障害が発生した。データベースをトランザクションTの終了直後の状態に戻すために用いられる復旧技法はどれか。ここで、チェックポイントのほかに、トランザクションログが利用できるものとする。
選択肢
ア:2相ロック
イ:トランザクションスケジューリング
ウ:ロールバック
エ:ロールフォワード(正解)
🔒 解説は解答すると表示されます
ロールフォワード復旧【午前解説】
正解の理由
正解: エ
チェックポイント取得後にトランザクションTが完了(コミット)し、その後障害が発生した状況では、コミット済みの更新がディスクに反映されていない可能性があります。トランザクションログが利用できる場合、チェックポイント以降のログを順に適用(redo)してデータベースをトランザクション終了直後の状態に戻す必要があります。これがロールフォワード(redo)であり、コミット済み変更の再適用によって耐久性を回復します。
解法ステップ
- 問題文で「チェックポイント取得後に完了(コミット)した」とある点を確認する。
- 各選択肢の役割を整理する(2相ロック=同時実行制御、スケジューリング=順序管理、ロールバック=undo、ロールフォワード=redo)。
- コミット済みの変更を反映するために必要なのはundoではなくredoであることを判断する。
- ログが利用可能である点から、ログを使ったロールフォワードが適切と結論づける。
選択肢別の誤答解説
-
ア: 2相ロック
誤り。2相ロックはトランザクションの同時実行制御と整合性維持を目的とする方式であり、障害後の復旧手段ではありません。 -
イ: トランザクションスケジューリング
誤り。スケジューリングは同時実行のための実行順序管理であり、障害復旧のためにログを再適用する手法ではありません。 -
ウ: ロールバック
誤り。ロールバック(undo)は未コミットのトランザクションの取り消しに使います。今回の条件ではトランザクションTはコミット済みであり、取り消すべきではありません。 -
エ: ロールフォワード
正解。チェックポイント以降にコミットされた更新をトランザクションログから順に再適用して、終了直後の状態に戻す手法です。
よくある誤解
- ロールバックとロールフォワードを混同して、コミット済みのトランザクションに対してロールバックを適用しようとする誤り。ロールバックは未コミットの取消しに使います。
- 2相ロック(2PL)を「復旧策」と誤認するケース。2PLは同時実行制御であって、障害後の再構築を行う手法ではありません。
- チェックポイント以降のログは不要と考える誤解。チェックポイントは復旧範囲を狭めるが、以降のログはコミット再現に必須です。
補足コラム
- 実務的な復旧アルゴリズムの代表はARIESで、復旧処理は一般に「分析(analysis)→再適用(redo)→巻き戻し(undo)」の3段階です。チェックポイントは分析フェーズの起点を提供し、redoでコミット済み更新を反映、undoで未コミットを取り消します。
- Write-Ahead Logging(WAL)では、データをディスクに書き込む前にログに先に書かれていることが前提で、これによりログからの再適用で一貫性と耐久性を回復できます。
- チェックポイントには「局所(fuzzy)チェックポイント」などの実装差があり、復旧時にどのログからredoを開始するかが変わります。問題文ではログが利用可能と明示されているため、redo実行が前提です。
FAQ
Q1: コミット済みなら何もしなくても良いのでは?
A1: コミットがアプリケーション的には完了していても、更新内容がまだディスク(安定記憶)に反映されていない場合があるため、ログからredoして状態を回復する必要があります。
A1: コミットがアプリケーション的には完了していても、更新内容がまだディスク(安定記憶)に反映されていない場合があるため、ログからredoして状態を回復する必要があります。
Q2: ロールフォワードだけで十分か?
A2: 一般にはコミット済みはredo、未コミットはundoが必要です。今回の設問は「チェックポイント後に完了したトランザクション」に限定されているためredo(ロールフォワード)が答えになります。
A2: 一般にはコミット済みはredo、未コミットはundoが必要です。今回の設問は「チェックポイント後に完了したトランザクション」に限定されているためredo(ロールフォワード)が答えになります。
Q3: ログがなければどうなるか?
A3: トランザクションログがない場合、コミット済みの未反映変更を再現できないため、完全な回復が不可能になるか、バックアップからの復元と手動修正が必要になります。
A3: トランザクションログがない場合、コミット済みの未反映変更を再現できないため、完全な回復が不可能になるか、バックアップからの復元と手動修正が必要になります。
Q4: 2相ロックはいつ重要か?
A4: 2相ロックは障害時の復旧ではなく、実行中のトランザクション間の整合性(データ競合防止)を確保するために重要です。
A4: 2相ロックは障害時の復旧ではなく、実行中のトランザクション間の整合性(データ競合防止)を確保するために重要です。
関連キーワード: トランザクション, チェックポイント, ロールフォワード, ロールバック, トランザクションログ, WAL, ARIES, データベース復旧

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

