基本情報技術者 2016年 春期 午前(科目A) 問28
問題文
トランザクションが、データベースに対する更新処理を完全に行うか、全く処理しなかったかのように取り消すか、のどちらかの結果になることを保証する特性はどれか。
選択肢
ア:一貫性(consistency)
イ:原子性(atomicity)(正解)
ウ:耐久性(durability)
エ:独立性(isolation)
🔒 解説は解答すると表示されます
原子性(トランザクション)【午前解説】
正解の理由
正解は イ(原子性:atomicity)です。問題文が指す「完全に行うか全く処理しなかったかのように取り消すか」という性質は、トランザクションの「すべてかゼロか(all-or-nothing)」という定義に一致します。原子性があると、トランザクション中の複数の更新操作は1つの不可分な単位になり、途中で失敗した場合はデータベースを開始前の状態に戻す(ロールバック)ことで中間的な不整合を残しません。これが問題で求められている保証です。
解法ステップ
- 問題文のキーワードを確認:「完全に行うか、全く処理しなかったかのように取り消す」=「all-or-nothing」。
- ACID の各要素を思い出す:A=原子性(atomicity)、C=一貫性(consistency)、I=独立性(isolation)、D=耐久性(durability)。
- キーワードとACIDを突き合わせる:all-or-nothing は原子性そのものなので選択肢から即決できる。
- 残りの選択肢は定義で除外する(整合性、耐久性、隔離性は別概念)。
選択肢別の誤答解説
-
ア: 一貫性(consistency)
説明:一貫性はトランザクション開始前と終了後でデータが整合性制約(参照整合性、ドメイン制約など)を満たすことを保証します。
なぜ誤りか:中間操作の「全か無か」を保証する性質ではなく、制約に基づく正当な状態遷移を指します。 -
イ: 原子性(atomicity)
説明:トランザクション内の全操作を1つの単位として扱い、全て成功して初めて確定(コミット)され、失敗時は全て取り消されます。
なぜ正解か:問題文の「完全に行うか、全く処理しなかったか」の定義と一致します。 -
ウ: 耐久性(durability)
説明:トランザクションがコミットされた後、その結果はシステム障害が発生しても失われず永続化される性質です。
なぜ誤りか:これはコミット後の永続性に関する性質であり、全か無かの取り消しを保証するものではありません。 -
エ: 独立性(isolation)
説明:同時に実行されるトランザクション間での干渉を防ぎ、ある程度直列実行と等価の振る舞いを提供する性質です。
なぜ誤りか:並行制御に関する性質であり、トランザクションの内部操作を全か無かにする原理ではありません。
よくある誤解
- 「一貫性=原子性」と混同する誤解:一貫性(consistency)は制約やトランザクション後のデータ整合性を指し、全か無かの保証とは別です。
- 「耐久性と原子性を混同する」:耐久性はコミット後に変更が永続化されることを指し、ロールバックによる全取り消しの概念とは異なります。
- 並行制御(独立性)が中間状態を防ぐという誤解:独立性(isolation)は同時実行時の干渉を防ぐが、トランザクションの途中での全取り消しを保証するものではありません。
補足コラム
ACID 特性はデータベース設計・トランザクション制御の基本概念です。原子性はアプリケーションの整合性を保つために欠かせません。現実のDBMSでは原子性を実現するためにログ(トランザクションログ)やロールバック機構、チェックポイント、場合によっては2フェーズコミット(分散トランザクション)などが使われます。
SQLでの簡単な例:
BEGIN TRANSACTION;
UPDATE 預金 SET 残高 = 残高 - 1000 WHERE 口座ID = 1;
UPDATE 預金 SET 残高 = 残高 + 1000 WHERE 口座ID = 2;
-- 途中でエラーが発生したら
ROLLBACK; -- 変更は取り消される(原子性)
-- 問題なければ
COMMIT; -- 変更が確定される(耐久性と併せて)
FAQ
Q1. 原子性とロールバックは同じですか?
A1. 厳密には異なります。原子性は「全か無か」の性質自体を指し、ロールバックはその性質を実現する手段の一つです。
A1. 厳密には異なります。原子性は「全か無か」の性質自体を指し、ロールバックはその性質を実現する手段の一つです。
Q2. トランザクションが長時間実行されると原子性に影響がありますか?
A2. 長時間トランザクションはロックやリソース競合を引き起こしやすいが、原子性自体(全か無かの保証)はDBMSが維持します。ただし実運用では分割や再設計が推奨されます。
A2. 長時間トランザクションはロックやリソース競合を引き起こしやすいが、原子性自体(全か無かの保証)はDBMSが維持します。ただし実運用では分割や再設計が推奨されます。
Q3. 分散トランザクションでも原子性は保証されますか?
A3. 分散トランザクションでは2フェーズコミットなどのプロトコルで原子性を確保しますが、実装の複雑さや障害対策の考慮が必要です。
A3. 分散トランザクションでは2フェーズコミットなどのプロトコルで原子性を確保しますが、実装の複雑さや障害対策の考慮が必要です。
関連キーワード: トランザクション、原子性、atomicity、ACID、コミット、ロールバック、一貫性、耐久性、独立性、分散トランザクション

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

