応用情報技術者 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

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

