ITパスポート 2014年 秋期 問71
問題文
図は処理1、処理2の順でデータベースを更新するトランザクションの処理フローを示している。図中のa〜cのうち、コミット処理(処理1、処理2の更新結果を確定させる処理)に該当する箇所だけを全て挙げたものはどれか。

選択肢
ア:a(正解)
イ:a, b
ウ:b, c
エ:c
🔒 解説は解答すると表示されます
図のコミット箇所はどれか【ITパスポート 解説】
正解の理由
このフローでは「処理1 → 処理2」の順にデータベースを更新します。トランザクション(複数の処理を一つのまとまりとして扱い、全部成功したら確定(コミット)、どれか失敗したら元に戻す(ロールバック)仕組み)の性質から、両方の処理が正常に終わった後に初めて「更新結果を確定する(コミット)」を行います。図を見ると、処理1と処理2の両方で「Yes(正常終了)」の枝を通った先がボックス a だけです。したがって、コミットに該当するのは ア(a)のみになります。
解法ステップ
-
「コミット」の定義を確認する
- コミット(commit:確定)は、トランザクション内のすべての更新が成功したときに、その変更を永続化する処理。失敗があればコミットせず、元に戻す(ロールバック)ことが普通。
-
フローチャートの分岐を追う
- 処理1が正常か? → Yesなら処理2へ、Noなら右へ(c)。
- 処理2が正常か? → Yesなら左の a、Noなら b。
-
「両方正常」の経路を探す
- 処理1 Yes、処理2 Yes の経路の到達点が a のみ。
-
よって、コミットは a の箇所に対応する(ア)。
選択肢別の誤答解説
-
ア: a
- 正しい。処理1・処理2の両方が正常に終了したルートの先が a であり、コミット(変更の確定)に該当する。
-
イ: a, b
- 誤り。b は処理2 が「No(異常)」のときに到達する。処理2が失敗している場合にコミットすると整合性が壊れるため、b はコミットではなくエラーハンドリングやロールバックに相当する。
-
ウ: b, c
- 誤り。どちらも少なくとも処理のどちらかが失敗したときに到達する箇所(c は処理1が失敗、b は処理2が失敗)。失敗時にコミットすることは通常ないため不正解。
-
エ: c
- 誤り。c は処理1 が正常終了していない(No)場合に行く場所。処理1が成功していないので、コミットする対象にならない。
よくある誤解
-
「各処理ごとにコミットして良い」と思うミス
- 例えば処理1の後にコミットすると、処理2が失敗したときにデータ不整合が起きる可能性があります。トランザクションの目的は「全部まとめて成功か、全部なかったことにする」点です。
-
「Yes/No の向きだけ見て判断する」
- 単に Yes の枝にあるからコミット、ではなく「どの条件(どの処理の成功か)で到達するか」を必ず確認することが重要です。
補足コラム:コミットとロールバック、そして ACID
- コミット(commit):変更を確定して永続化する操作。英語の意味は「確定する」。
- ロールバック(rollback):トランザクション内の変更を取り消して開始前の状態に戻す操作。
- ACID(データベースの性質の頭字語)
- Atomicity(原子性):処理は「全部実行」か「全部実行しない」かのどちらか。
- Consistency(一貫性):整合性ルールを保つ。
- Isolation(独立性):他の処理と干渉しない。
- Durability(永続性):コミット後は結果が消えない。
- 実務の例:銀行での振替は「口座Aから引き落とし」→「口座Bへ入金」。両方成功して初めて確定(コミット)し、片方だけ確定してしまうとお金が消えたり二重になったりします。
FAQ
Q1. b や c は具体的に何をする場所ですか?
A1. 図の構造から、b と c はどちらも「どこかが正常終了していない」場合に行く分岐点です。実務ではエラーメッセージ表示、ログ記録、ロールバック(更新取り消し)、後続処理の中止などを行うことが想定されます。コミットは通常行いません。
A1. 図の構造から、b と c はどちらも「どこかが正常終了していない」場合に行く分岐点です。実務ではエラーメッセージ表示、ログ記録、ロールバック(更新取り消し)、後続処理の中止などを行うことが想定されます。コミットは通常行いません。
Q2. もし処理2が存在しなければコミットはどこで起きますか?
A2. 単一処理ならその処理が正常終了した直後にコミットしてよい場面もあります。ただし「一連の更新が複数あるか」を基準に判断してください。
A2. 単一処理ならその処理が正常終了した直後にコミットしてよい場面もあります。ただし「一連の更新が複数あるか」を基準に判断してください。
Q3. コミットと保存(save)は同じですか?
A3. 実装によって表現は変わりますが概念的には「保存=コミットに相当することが多い」です。重要なのは「永続化されるかどうか」と「失敗時に元に戻せるか」です。
A3. 実装によって表現は変わりますが概念的には「保存=コミットに相当することが多い」です。重要なのは「永続化されるかどうか」と「失敗時に元に戻せるか」です。
関連キーワード: トランザクション、コミット、ロールバック、ACID、データベース更新

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

