データベースの基礎
トランザクションT1〜T5があり、障害が発生する前にチェックポイントを1回取った。T1はチェックポイントの前に開始してコミットした。T2とT3はチェックポイントの前に開始し、T2はチェックポイントのあと障害の前にコミットし、T3は障害の時点でコミットしていなかった。T4とT5はチェックポイントのあとに開始し、T4は障害の前にコミットし、T5はコミットしていなかった。障害のあとの回復で、ログを使ってロールフォワードする必要があるトランザクションはどれか。
- AT3とT5
- BT1、T2、T4
- CT2とT4
答えと解説を見る
正解:C. T2とT4
チェックポイントでは、その時点までにメモリ上で更新されたデータベースのページを記憶装置に書き込み、そのことをログに記録します。そのため、チェックポイントより前にコミットしたT1の更新は、すでにデータベース本体に反映されていて、回復の処理は要りません。チェックポイントのあと障害の前にコミットしたT2とT4は、コミットは完了しているのに、更新の一部が本体に書かれていない可能性があるので、ログの更新後の値を使ってやり直します(ロールフォワード)。障害の時点でコミットしていなかったT3とT5は、本体に書かれた途中の更新があれば、ログの更新前の値を使って取り消します(ロールバック)。T3のようにチェックポイントの前に開始したトランザクションも、コミットしていなければ取り消しの対象です。チェックポイントを取っておくと、ログを最初からすべてたどる必要がなくなり、回復の時間が短くなります。
- A. T3とT5はコミットしていないので、ロールバックの対象です。
- B. T1はチェックポイントより前にコミットしており、更新は本体に反映済みなので対象外です。
- C. 正しい。チェックポイントのあと障害の前にコミットしたT2とT4をロールフォワードします。