応用情報技術者 2023年 秋期 午前2 問30
問題文
DBMS をシステム障害発生後に再立上げするとき、ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして、適切なものはどれか。ここで、トランザクションの中で実行される処理内容は次のとおりとする。


選択肢
ア:(正解)
イ:
ウ:
エ:
🔒 解説は解答すると表示されます
トランザクション復旧処理【午前2解説】
正解の理由
クラッシュ復旧では (1) チェックポイント以降にコミットされた変更はデータベースに反映されていない可能性があるためロールフォワード(REDO)を行い、(2) 障害時に未コミットのうちデータベースに書き込みを行っているトランザクションはその不整合を取り消すためロールバック(UNDO)する必要があります。図から、チェックポイント後にコミットしたのは T2 と T5、障害時にコミットしていないのは T3、T4、T6 です。ただし T3 と T4 は「Write 回数が 0(Read のみ)」であり、データベースに変更を与えていないためロールバック/ロールフォワードの対象になりません。したがってロールフォワード対象は T2 と T5、ロールバック対象は書き込みがあり未コミットの T6 となり、これが ア の組合せが正しい理由です。
解法ステップ
- 図の「黒丸」を見てコミット済み/未コミットを判定する
- 黒丸があるものはコミット済み(例:T1、T2、T5)
- 黒丸がないものは未コミット(例:T3、T4、T6)
- 各トランザクションの Read/Write 情報を確認する
- 書き込み(Write)が 0 のトランザクションはデータベースに変更を与えていない
- ロールフォワード(REDO)の決定
- チェックポイント以降にコミットしたトランザクション(=コミット済みかつチェックポイント以降の変更)を対象にする → T2, T5
- チェックポイントより前にコミット済みでディスクに反映済みのもの(例:T1)は不要
- ロールバック(UNDO)の決定
- 障害時に未コミットで、かつ DB に書き込みを行っているトランザクションを対象にする → T6
- 未コミットでも書き込みがない(Read のみ)のものは対象外(T3、T4)
選択肢別の誤答解説
- ア(正答)
- ロールフォワード:T2, T5(チェックポイント後にコミット)
- ロールバック:T6(未コミットかつ書込みあり) → 正しい組合せ
- イ
- ここは T3 をロールバックに含めているが、T3 は Write 回数が 0(Read のみ)であり、DB に変更を与えていないためロールバック不要。よって誤り
- ウ
- T1 をロールフォワード対象に含めているが、T1 はチェックポイント前に既にコミットしており、通常その変更はディスクに反映済み(チェックポイントの前提で)であるため冗長で不要。よって誤り
- エ
- ウ と同様に T1 を誤ってロールフォワード対象に含め、さらに T3 をロールバックに含めているため双方の誤りがある
よくある誤解
- 「未コミット=必ずロールバック」
- 未コミットであっても書き込みが一切ない(Read のみ)トランザクションは DB に不整合を起こさないのでロールバック/ロールフォワードの対象になりません。
- 「チェックポイント以降の全トランザクションをロールフォワード」
- チェックポイント以降にコミットしたトランザクションのみが REDO 対象です。チェックポイント前にコミット済みでディスクに反映済みのものは不要です。
補足コラム
- 実務では ARIES 等の復旧アルゴリズムが用いられ、WAL(Write-Ahead Logging)ルールによりログの REDO/UNDO を行います。ARIES の考え方に沿うと、ログに書かれた変更を参照して「コミット済みで未反映の変更を REDO」「未コミットの変更を UNDO」するという処理が標準化されています。図問の評価はこの基本原則の理解があれば正しく解けます。
- 「Read のみトランザクションは無害である」ことを覚えておくと、図を読み違えにくくなります。
FAQ
Q. なぜ T1 のようにチェックポイント前にコミットしたトランザクションはロールフォワード不要なのか
A. チェックポイント時点でその時点までのコミット済みデータがディスクに反映されている(あるいはログで整合が担保されている)という前提のため、復旧時に再適用する必要が通常はありません。
A. チェックポイント時点でその時点までのコミット済みデータがディスクに反映されている(あるいはログで整合が担保されている)という前提のため、復旧時に再適用する必要が通常はありません。
Q. ロールバック対象の判定でログを見る必要はあるか
A. 実システムではログ(ウォルログ)を参照して、どのトランザクションがどのレコードに変更を加えたかを確認し、必要な UNDO を行います。設問レベルでは図の Write 回数で代用できます。
A. 実システムではログ(ウォルログ)を参照して、どのトランザクションがどのレコードに変更を加えたかを確認し、必要な UNDO を行います。設問レベルでは図の Write 回数で代用できます。
関連キーワード: トランザクション, チェックポイント, ロールフォワード, ロールバック, REDO, UNDO, WAL, ARIES

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

