基本情報技術者試験 無料問題 3 / 10 ・ 分野1: 科目A テクノロジ系
口座Aから口座Bへ1万円を振り替える処理を1つのトランザクションとして実行する。口座Aから1万円を引いた直後に障害が起き、口座Bへの加算が行われなかった。このとき DBMS が口座Aの引き落としも取り消し、振替の前の状態に戻した。この動きが保証している ACID 特性はどれか。
- 耐久性(Durability)
- 原子性(Atomicity)
- 独立性(Isolation)
- 一貫性(Consistency)
正解と解説を見る
正解: B
正解の理由
原子性は、トランザクションの処理が「すべて実行される」か「まったく実行されない」かのどちらかになることを保証する。引き落としと加算は2つで1つの振替なので、片方だけが反映された状態を残してはならない。障害で加算ができなかったとき、引き落としも取り消して振替の前の状態に戻すのは、「まったく実行されない」側にそろえる原子性の働きである。
違う選択肢
「一貫性(Consistency)」… 一貫性は、トランザクションの前後でデータが決められた条件(合計額が変わらない、など)を満たすことをいう。結果として一貫性は保たれるが、途中まで行った処理を全部取り消すという動きそのものは原子性が保証する。
「独立性(Isolation)」… 独立性は、複数のトランザクションを同時に実行しても、互いの途中の状態が見えず、順に実行した場合と同じ結果になることをいう。設問は1つのトランザクションの途中で起きた障害の話で、同時実行は関係しない。
「耐久性(Durability)」… 耐久性は、コミットした結果がその後の障害でも失われないことをいう。設問の振替はコミットの前に障害が起きていて、取り消す側の話である。
押さえどころ
ACID の4つは「何を守るか」で見分ける。原子性は全部か無か、一貫性はデータの条件、独立性は同時実行の影響、耐久性はコミット後の結果の保存である。途中まで行った処理を取り消す話なら原子性、コミット後の結果を障害から守る話なら耐久性になる。