問71
頻出度★☆☆
図は処理1, 処理2の順でデータベースを更新するトランザクションの処理フローを示している。図中のa~cのうち, コミット処理 (処理1, 処理2の更新結果を確定させる処理) に該当する箇所だけを全て挙げたものはどれか。
この問題の解説と、これまでの解答の記録です。
図は処理1, 処理2の順でデータベースを更新するトランザクションの処理フローを示している。図中のa~cのうち, コミット処理 (処理1, 処理2の更新結果を確定させる処理) に該当する箇所だけを全て挙げたものはどれか。
正解 正解は ア (a)。トランザクションは「処理1と処理2をまとめて 1 つの不可分な単位として扱う」ものなので、更新結果を確定 (コミット) してよいのは、処理1・処理2の両方が正常終了したときだけです。図をたどると、「処理1が正常終了したか?」が Yes、続く「処理2が正常終了したか?」も Yes という経路の先にあるのは a だけです。したがってコミット処理に該当する箇所は a のみとなります。
a は正しいが b が誤り。b は「処理2が正常終了したか?」が No のときに通る箇所で、処理2が失敗している以上、更新結果を確定させてはいけません。b では処理1の更新も含めて取り消す (ロールバックする) 必要があるので、コミット処理には該当しません。
b も c も異常終了した経路にある箇所であり、どちらもコミットではなくロールバックに当たります。さらに、両方が正常終了した唯一の経路にある a が含まれていない点でも誤りです。
c は「処理1が正常終了したか?」が No のときに通る箇所です。処理1の段階で失敗しており、処理2は実行すらされていないので、確定させるべき正常な更新結果がありません。c は処理1の更新を取り消すロールバック処理であって、コミット処理ではありません。