DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。
ここで,トランザクションの中で実行される処理内容は次のとおりとする。
表:トランザクション/データベースに対するRead回数とWrite回数
T1,T2|Read 10,Write 20
T3,T4|Read 100
T5,T6|Read 20,Write 10
(────●はコミットされたトランザクションを示す。────はコミットされていないトランザクションを示す。)
正答1
解説
正解は1です。
図では、T1はチェックポイントより前にコミットしています。
T2とT5はチェックポイントの後、障害発生の前にコミットしています。
T3、T4、T6はコミットされないまま障害発生を迎えています。
DBMSの障害回復では、チェックポイント以降にコミットしたトランザクションの更新を、更新後ログを使ってやり直します(ロールフォワード)。
コミットしていないトランザクションの更新は、更新前ログを使って取り消します(ロールバック)。
【選択肢別解説】
1:○ T2とT5はチェックポイント後にコミットしたので、ロールフォワードの対象です。
T6は更新(Write)を含み未コミットなので、ロールバックの対象です。
T3とT4は参照(Read)だけで更新がないので、取り消す必要がありません。
2:× T3はReadだけのトランザクションです。
データベースを更新していないので、ロールバックする必要はありません。
3:× T1はチェックポイント前にコミットしています。
その更新はチェックポイントでデータベースに書き出されているので、ロールフォワードは不要です。
4:× T1をロールフォワードの対象に含めている点と、更新のないT3をロールバックの対象に含めている点の2つが誤りです。
【ポイント】
チェックポイント前にコミット済みなら何もしません。
チェックポイント後にコミットならロールフォワード、未コミットで更新ありならロールバックと整理します。