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