基本情報技術者 2014年 春期 午前(科目A) 問29
問題文
トランザクションが、データベースに対する更新処理を完全に行うか、全く処理しなかったかのように取り消すか、のどちらかの結果になることを保証する特性はどれか。
選択肢
ア:一貫性(consistency)
イ:原子性(atomicity)(正解)
ウ:耐久性(durability)
エ:独立性(isolation)
🔒 解説は解答すると表示されます
トランザクションの原子性【午前解説】
正解の理由
正解: イ
原子性(atomicity)は「全て実行されるか、全く実行されなかったか(all-or-nothing)」を保証する特性です。トランザクション内の複数の更新処理は一つの単位として扱われ、途中で障害が発生した場合はロールバックで変更前の状態に戻されます。問題文の「完全に行うか、全く処理しなかったかのどちらか」という記述はまさに原子性の定義に合致します。
原子性(atomicity)は「全て実行されるか、全く実行されなかったか(all-or-nothing)」を保証する特性です。トランザクション内の複数の更新処理は一つの単位として扱われ、途中で障害が発生した場合はロールバックで変更前の状態に戻されます。問題文の「完全に行うか、全く処理しなかったかのどちらか」という記述はまさに原子性の定義に合致します。
解法ステップ
- 問題文のキーワードを探す:「完全に行う」「全く処理しなかったか」「取り消す」などを確認。
- ACIDの定義を思い出す:A=原子性(atomicity)、C=一貫性、I=独立性、D=耐久性。
- キーワードと照合する:「全か無か」は原子性に対応するため、イを選ぶ。
選択肢別の誤答解説
- ア: 一貫性(consistency)
データベースの制約や整合性が保たれることを指します。トランザクションの「全か無か」を保証する概念ではないため不正解です。 - イ: 原子性(atomicity)
正解。トランザクションの全ての処理が完全に実行されるか、何も実行されなかった状態に戻されるかを保証します(コミット/ロールバック)。 - ウ: 耐久性(durability)
一度コミットされた更新が永続化され、障害後も消えない性質を指します。永続化の有無に関する概念であって「全か無か」ではありません。 - エ: 独立性(isolation)
同時実行トランザクション間の干渉を防ぐ性質(隔離レベル)であり、単一トランザクションの原子性とは別問題です。
よくある誤解
- 一貫性と混同する:一貫性はデータが整合ルール(制約)を満たすことを指し、「全か無か」を意味しないため混同しやすいです。
- 耐久性と混同する:耐久性はコミット後の変更が永続化される性質で、途中で取り消されるかどうかには関係しません。
- 独立性(隔離)と混同する:独立性は同時実行時の相互干渉の制御で、単一トランザクションの「全か無か」ではありません。
補足コラム
トランザクション処理では、一般的にログ(トランザクションログ)を用いてロールバックやリカバリを実現します。例えば銀行の口座振替処理では「口座Aからの引き落とし」と「口座Bへの入金」を一つのトランザクションにまとめ、どちらか一方だけ実行される事態を防ぎます。分散トランザクションでは2相コミット(2PC)などを使って原子性を保つことがあります。
FAQ
Q1: 原子性はどのように実現されますか?
A1: 通常はトランザクションログとロールバック機能、コミットポイントの管理で実現します。障害時はログを参照して状態を元に戻します。
A1: 通常はトランザクションログとロールバック機能、コミットポイントの管理で実現します。障害時はログを参照して状態を元に戻します。
Q2: 「一貫性」と「原子性」はどちらが上位の概念ですか?
A2: 上位下位というより役割が異なります。原子性は処理単位の完結性を保証し、一貫性はトランザクション実行後にデータが制約を満たすことを保証します。両方がACIDの一部です。
A2: 上位下位というより役割が異なります。原子性は処理単位の完結性を保証し、一貫性はトランザクション実行後にデータが制約を満たすことを保証します。両方がACIDの一部です。
Q3: ロールバックとコミットの違いは?
A3: コミットはトランザクションの変更を確定して永続化する操作、ロールバックは途中までの変更を取り消して開始前の状態に戻す操作です。
A3: コミットはトランザクションの変更を確定して永続化する操作、ロールバックは途中までの変更を取り消して開始前の状態に戻す操作です。
関連キーワード: トランザクション、原子性、ACID、コミット、ロールバック、トランザクションログ、隔離レベル

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

