基本情報技術者試験 令和6年度 科目A 公開問題(過去問) 問7 について解説します。
問題
問7 DBMSに実装すべき原子性(atomicity)を説明したものはどれか。
ア 同一データベースに対する同一処理は,何度実行しても結果は同じである。
イ トランザクション完了後にハードウェア障害が発生しても,更新されたデータベースの内容は保証される。
ウ トランザクション内の処理は,全てが実行されるか,全てが取り消されるかのいずれかである。
エ 一つのトランザクションの処理結果は,他のトランザクション処理の影響を受けない。
解説・解答
原子性とは
DBMSにおける原子性とは、トランザクションは不可分のひとまとまりとして扱われ、「全部が成功して確定(COMMIT)」するか、「一切を取り消して元に戻す(ROLLBACK)」かのどちらかしか起きない性質のことです。途中で失敗・障害・例外があっても中途半端な更新(部分反映)を残さないことが目的です。
それぞれの選択肢について確認します。
ア: 同一データベースに対する同一処理は,何度実行しても結果は同じである。
これは「冪等性(べきとうせい / idempotency)」という概念を説明しています。例えば、「在庫を0に設定する」処理を何度行っても、結果は常に0になるような操作です。冪等性はACID特性には含まれません。ACID特性は「トランザクションの性質」を示すものですが、冪等性は「処理を繰り返しても結果が変わらないか」というアプリケーション設計上の性質です。
イ: トランザクション完了後にハードウェア障害が発生しても,更新されたデータベースの内容は保証される。
これは「永続性(Durability)」の説明です。トランザクションがコミットされた後に障害(停電やサーバ故障など)が起きても、その更新内容はログやジャーナルによって保護され、再起動後も失われません。
(例)
銀行の振込処理が「完了しました」と表示された後、停電が発生しても、その取引内容はデータベースに確実に保存されている。
ウ: トランザクション内の処理は,全てが実行されるか,全てが取り消されるかのいずれかである。
これが「原子性(Atomicity)」の定義です。トランザクションは一連の操作を1つのまとまりとして扱い、途中で障害が起きたら、全体を取り消す(ロールバックする)ことにより整合性を保ちます。
(例)
銀行振込(A→B)
・Aの口座から1万円引く
・Bの口座に1万円加える
途中でエラーが発生した場合、Aの「引き落とし」だけが反映されると不整合となるため、トランザクション全体を取り消してAの状態を元に戻す。
エ: 一つのトランザクションの処理結果は,他のトランザクション処理の影響を受けない。
これは「分離性(Isolation)」の説明です。複数のトランザクションが同時に実行されても、互いの処理結果が干渉しないようにする性質です。
(例)
・トランザクションA:在庫を確認して購入処理を実施
・トランザクションB:同時に在庫を更新中
DBMSはロックや直列化などで「トランザクションAがトランザクションBの途中経過を読まないように」制御する。
以上により、この問題の解答は「ウ」になります。
