応用情報技術者 2014年 春期 午前2 問30
問題文
トランザクションの原子性(atomicity)の説明として、適切なものはどれか。
選択肢
ア:データの物理的格納場所やアプリケーションプログラムの実行場所を意識することなくトランザクション処理が行える。
イ:トランザクションが終了したときの状態は、処理済みか未処理のどちらかしかない。(正解)
ウ:トランザクション処理においてデータベースの一貫性が保てる。
エ:複数のトランザクションを同時に処理した場合でも、個々の処理結果は正しい。
🔒 解説は解答すると表示されます
原子性(Atomicity)【午前2解説】
正解の理由
トランザクションの原子性とは「全て成功するか全て失敗するかのどちらかで、中途半端な状態を残さない」性質を指します。選択肢の中では、処理の終了時点で「処理済みか未処理かのどちらかしかない」と述べている イ がこの定義と一致します。原子性はコミット(commit)で全操作が反映されるか、ロールバック(rollback)で何も反映されないか、という観点で表現されます。
解法ステップ
- 問題文で問われている概念が「原子性(atomicity)」であることを確認する。キーワードは「全か無か(all-or-nothing)」「コミット/ロールバック」など。
- 各選択肢のキーワードと照合する。原子性に直接対応する表現を探す。
- 原子性以外のACID特性(一貫性=Consistency、独立性=Isolation、永続性=Durability)と混同していないか確認する。
- 最も直接に「中途半端がない」ことを述べている選択肢を正とする。
選択肢別の誤答解説
- ア: 「データの物理的格納場所やアプリケーションプログラムの実行場所を意識することなく…」
→ これは分散処理や透過性(location transparency)に関する説明で、原子性とは無関係です。 - イ: 「トランザクションが終了したときの状態は、処理済みか未処理のどちらかしかない。」
→ 原子性の定義に一致します。コミットされれば全操作が反映され、失敗すればすべて取り消されるため、終了時に中途半端な状態は存在しません。 - ウ: 「トランザクション処理においてデータベースの一貫性が保てる。」
→ これはACIDの「一貫性(Consistency)」に関する説明です。制約やルールを常に満たすことを指し、原子性とは別の特性です。 - エ: 「複数のトランザクションを同時に処理した場合でも、個々の処理結果は正しい。」
→ これは「独立性(Isolation)」に相当します。並行実行による干渉を防ぎ、直列実行と同等の結果を保証するものです。原子性とは焦点が異なります。
よくある誤解
- 「整合性」と「原子性」を混同する受験者が多い。
→ 整合性(ここでは一貫性)はデータが制約に従うこと、原子性は操作群が全体として適用されるか全く適用されないかです。 - 原子性=永続性と誤解するケース。
→ 永続性(Durability)は一度コミットされた結果が障害後も消えないこと。原子性はコミット/ロールバックの単位の扱いに関する性質です。 - 「原子性は単に実行場所を隠すことだ」と勘違いする。
→ 実行場所の透過性は別概念(分散トランザクションの話)で、原子性の説明とは異なります。
補足コラム
ACID特性の整理(用語を統一して簡潔に)
- 原子性(Atomicity): トランザクション内のすべての操作は「全て適用」か「全て取り消し」。
- 一貫性(Consistency): トランザクション開始前後でデータがデータベースの制約を満たす。
- 独立性(Isolation): 並行実行でも他トランザクションの影響を受けないように見えること(直列化可能性など)。
- 永続性(Durability): コミットした変更は障害が起きても失われない。
実例(銀行の口座振替): 口座Aから引き落とし、口座Bに入金する一連の操作は1つのトランザクションで実行される。途中で障害が起きれば両方とも取り消され、片方だけ反映されることはない。
SQLの簡単な例:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 'A';
UPDATE accounts SET balance = balance + 100 WHERE id = 'B';
-- 問題なければ
COMMIT;
-- 障害や検査失敗があれば
ROLLBACK;
FAQ
Q. 原子性はどのレイヤで保証されるのですか?
A. DBMSがログ(トランザクションログ)やリカバリ機構、または分散環境では2フェーズコミットなどで保証します。アプリ側だけでは原子性を完全に保証できません。
A. DBMSがログ(トランザクションログ)やリカバリ機構、または分散環境では2フェーズコミットなどで保証します。アプリ側だけでは原子性を完全に保証できません。
Q. 分散トランザクションで原子性を保つには?
A. 複数ノード間で全か無かを保証するために、2フェーズコミット(2PC)やより高度な分散合意プロトコルが用いられます。
A. 複数ノード間で全か無かを保証するために、2フェーズコミット(2PC)やより高度な分散合意プロトコルが用いられます。
Q. 「部分コミット」という概念はあり得ますか?
A. 単一トランザクションとしてはあり得ません。部分コミットが起きるのは設計上トランザクションを分割している場合で、原子性は各トランザクション単位で成り立つことに注意してください。
A. 単一トランザクションとしてはあり得ません。部分コミットが起きるのは設計上トランザクションを分割している場合で、原子性は各トランザクション単位で成り立つことに注意してください。
関連キーワード: トランザクション、原子性、ロールバック、コミット、ACID、一貫性、独立性、永続性、並行制御、分散トランザクション

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

