ログを用いた再始動時の回復
DBMS のログに次の順でレコードが記録された直後に,システム障害が発生した。再始動時の回復処理で,ロールフォワードとロールバックの対象となるトランザクションの組合せとして,適切なものはどれか。ここで,チェックポイントではその時点までの更新を全てデータベースに書き出すが,それ以外の時点では,コミット済みの更新が書き出されているとは限らず,コミット前の更新が書き出されていることもあるものとする。
1: T1 開始
2: T2 開始
3: T1 コミット
4: T4 開始
5: チェックポイント
6: T3 開始
7: T2 コミット
8: T5 開始
9: T3 コミット- アロールフォワード:T1,T2,T3 ロールバック:T4,T5
- イロールフォワード:T2,T3 ロールバック:T4,T5
- ウロールフォワード:T3 ロールバック:T5
- エロールフォワード:T2,T3 ロールバック:T5
正解と解説を見る
正解 イ
この問題の基礎知識
- DBMS のログには更新前の値(更新前ログ)と更新後の値(更新後ログ)が記録される。ロールフォワードは更新後ログでコミット済みの更新を反映し直し,ロールバックは更新前ログで未コミットの更新を取り消す。
- チェックポイントでは,その時点までのバッファ上の更新をデータベースに書き出す。チェックポイントより前にコミットしたトランザクションの更新は,再始動時に反映し直す必要がない。
- システム障害からの再始動では,障害時点でコミット済みのトランザクションの更新は確定させ(持続性),未コミットのトランザクションの更新は全て取り消す(原子性)。
アロールフォワード:T1,T2,T3 ロールバック:T4,T5
T1 はチェックポイントより前にコミットしており,その更新はチェックポイントでデータベースに書き出し済みである。ロールフォワードが必要なのはチェックポイント後にコミットした T2,T3 であり,T1 をロールフォワードする必要はない。
イロールフォワード:T2,T3 ロールバック:T4,T5正解
チェックポイント後にコミットした T2,T3 は,更新後ログでロールフォワードする。障害時点で未コミットの T4,T5 は,データベースに書き出された可能性のある更新を更新前ログでロールバックする。
ウロールフォワード:T3 ロールバック:T5
チェックポイント後に開始したトランザクションだけを対象にしている。T2 のチェックポイント後の更新はデータベースに反映されていない可能性があり,T4 の更新はチェックポイントで書き出されているので,どちらも回復の対象になる。
エロールフォワード:T2,T3 ロールバック:T5
T4 はチェックポイントの時点で実行中であり,それまでの更新はチェックポイントでデータベースに書き出されている。障害時点で未コミットなので,原子性を保つために T4 もロールバックしなければならない。
検証用の出典レビュー済み
J. Gray, A. Reuter, Transaction Processing: Concepts and Techniques, Morgan Kaufmann, 1993 / C. Mohan et al., ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging, ACM TODS, 1992