はじめに
データベース管理システム(DBMS)を扱う上で避けて通れないのが「トランザクション処理」の概念だ。
トランザクションとは、データベースにおける一連の処理のまとまりのことであり、その正確性や整合性を保証するためには、いくつかの特性が求められる。
特に重要なのが「ACID特性」と呼ばれる4つの特性であり、それぞれがデータの一貫性と信頼性を確保する役割を持つ。
本記事では、令和6年度の基本情報技術者試験で出題された、ACID特性の一つである「原子性(Atomicity)」について詳しく解説する。
実際の試験問題
令和6年(2024年)の基本情報技術者試験(科目A)問7の試験問題を見てみよう。
問題
DBMSに実装すべき原子性(Atomicity)を説明したものはどれか。
ア. 同一データベースに対する同一処理は、何度実行しても結果は同じである。
イ. トランザクション完了後にハードウェア障害が発生しても、更新されたデータベースの内容は保証される。
ウ. トランザクション内の処理は、全てが実行されるか、全てが取り消されるかのいずれかである。
エ. 一つのトランザクションの処理結果は、他のトランザクション処理の影響を受けない。
解答と解説
この問題の正解は 「ウ」 だ。では、それぞれの選択肢が何を意味するのか詳しく見ていこう。
1. 原子性(Atomicity)とは?
原子性(Atomicity) とは、「トランザクション内の処理は、すべてが実行されるか、すべてが取り消されるかのいずれかである」という性質を指す。
トランザクションを「原子(Atom)」に例えるとわかりやすい。原子は分割不可能な単位として扱われるように、トランザクションも途中で分割されることはなく、すべての処理が完了するか、あるいは一切実行されなかったことになる。
この原子性を保証するために、DBMSは「コミット(commit)」と「ロールバック(rollback)」 という処理を提供する。
- コミット(commit) → トランザクションを正常に完了させ、変更を確定する
- ロールバック(rollback) → トランザクション中の処理をすべて取り消し、元の状態に戻す
例えば、銀行の振込処理を考えてみよう。
例:銀行振込
- 口座Aから1万円を引き落とす
- 口座Bに1万円を入金する
この処理の途中でシステム障害が発生した場合、口座Aからお金だけが引き落とされ、口座Bには入金されないといった不整合が生じる可能性がある。
しかし、原子性が保証されていれば、どちらか一方だけの処理が完了することはなく、すべての処理が成功するか、あるいは完全に取り消される(ロールバック) ため、データの一貫性が維持される。
2. 各選択肢の説明
ア. 同一データベースに対する同一処理は、何度実行しても結果は同じである。【誤り】
この性質は「べき等性(Idempotency)」と呼ばれるものであり、ACID特性には直接含まれない。ただし、データの一貫性に関連する概念ではある。
例えば、UPDATE
文であるデータの値を 100
に設定する処理を何度実行しても、結果が 100
で変わらない場合、これがべき等性の性質を持つことになる。
イ. トランザクション完了後にハードウェア障害が発生しても、更新されたデータベースの内容は保証される。【誤り】
この性質は「永続性(Durability)」と呼ばれるものであり、原子性ではない。
永続性とは、トランザクションが正常に完了(コミット)した場合、その変更はデータベースに恒久的に保存され、システム障害が発生しても失われないことを保証する特性だ。
DBMSはこれを確保するために、トランザクションログを利用する。たとえ障害が発生しても、ログを元にデータを復旧できる仕組みが取られている。
エ. 一つのトランザクションの処理結果は、他のトランザクション処理の影響を受けない。【誤り】
この性質は「独立性(Isolation)」と呼ばれるものであり、原子性とは異なる。
独立性とは、複数のトランザクションを並列に実行しても、それぞれのトランザクションが他の影響を受けずに正しく実行されることを保証する特性だ。
例えば、2人のユーザーが同じ商品を同時に購入しようとしたとき、適切なトランザクション制御がなければ、両方のユーザーが「在庫がある」と判断し、購入手続きが進んでしまう可能性がある。
独立性を確保するためには、トランザクションの分離レベル(Isolation Level)を適切に設定し、競合を防ぐ必要がある。
ACID特性のまとめ
DBMSのトランザクション処理には、以下の4つの特性がある。
特性 | 意味 | 対応する選択肢 |
---|---|---|
原子性(Atomicity) | トランザクションは全体として実行されるか、全く実行されないかのどちらかである | ウ(正解) |
一貫性(Consistency) | トランザクションによりデータの矛盾が生じないようにする | (本問では直接関連なし) |
独立性(Isolation) | 他のトランザクションの影響を受けずに処理が行われる | エ(誤り) |
永続性(Durability) | 正常終了したトランザクションの結果は、その後の障害でも失われない | イ(誤り) |
まとめ
今回の試験問題では、「DBMSに実装すべき原子性(Atomicity)」の説明として、「トランザクション内の処理は、全てが実行されるか、全てが取り消されるかのいずれかである」が正解だった。
原子性は、トランザクションの不可分性を保証する重要な概念であり、実務でも頻繁に登場する。
データの整合性を守るため、コミットとロールバックを適切に扱うことが求められる。
データベースを扱う機会があれば、ぜひこのACID特性を意識してみよう。
コメント