問題本文
図は処理1,処理2の順でデータベースを更新するトランザクションの処理フローを示している。図中のa〜cのうち,コミット処理(処理1,処理2の更新結果を確定させる処理)に該当する箇所だけを全て挙げたものはどれか。 [フロー: 開始 → 処理1 → 処理1が正常終了したか?(No→c, Yes→処理2) → 処理2が正常終了したか?(No→b, Yes→a) → 終了]
解説
トランザクションは,データベースに対する一連の処理であり,全て成功した場合のみ確定(コミット)し,途中で異常があれば取り消し(ロールバック)するACID特性が原則となる. 本問のフローでは,処理1と処理2の両方が正常終了した時点で初めて更新内容を確定するコミット処理が必要. 図中「aがYes(処理2正常終了)→終了」のa位置がコミットに該当する. bは処理2失敗時のロールバック位置,cは処理1失敗時のロールバック位置で,いずれもコミットではない. コミットは「全成功確認後」に1か所のみ実行するのが原則となる.
選択肢ごとの解説
- ア.正解. 処理1と処理2の両方が正常終了したことを確認した直後の位置(a)が,更新内容を確定させるコミット処理に該当する. トランザクションは全成功時のみコミットするのが鉄則で,いずれかが失敗した場合はロールバックする. aの単独指定が正しく,b・cはコミット位置ではない. 全成功確認後の一点のみがコミット.
- イ.誤り. a・bを挙げているが,b(処理2が正常終了しなかったとき)はロールバック(取り消し)に該当する位置で,コミット(確定)ではない. コミットは「全処理成功時」に行うものであり,失敗時はロールバックという別処理になるため,bをコミットに含めるのは誤りである. 成功と失敗の処理を取り違えない.
- ウ.誤り. b・cを挙げているが,いずれも処理の正常終了ではなく異常終了時のロールバック位置. コミットは「全処理が正常に完了した」場合に行う確定処理であり,失敗時のロールバックとは正反対の処理である. 異常終了パスをコミットと取り違えており,根本的な誤解に基づく選択肢となる.
- エ.誤り. c(処理1が正常終了しなかったとき)はロールバック(取り消し)に該当する位置で,コミットではない. 処理1が失敗した時点で処理2にも進まずに取り消すべきで,コミットは全成功確認後のa位置のみとなる. 異常パスをコミットに含めるのは根本的な誤りで,ACID特性の理解不足.
ITパスポート 2014年 (平成26年 秋期) の過去問一覧へ戻る・問71