平成21年度 秋期 ITパスポート試験 問88 解説 データベースの排他制御
複数の利用者が同時にデータベースを利用する場合に,1人の利用者がデータ更新中に,同一のデータを別の利用者が参照しようとした。このとき,データの整合性を保障するためのデータベース管理システムでの制御として,適切なものはどれか。
- ア 更新処理を中断して参照させる。
- イ 更新中の最新のデータを参照させる。
- ウ 更新中の利用者の処理が終了してから参照させる。 ✓ 正答
- エ 更新を破棄して更新前のデータを参照させる。
解説
この問題の正解を導く鍵は、データベースにおける排他制御(ロック)という概念です。複数の人が同じデータを同時に触る際、矛盾が生じないように順番を整理する仕組みのことです。更新が終わるまでは他の処理を待たせる、という基本ルールを理解していれば、迷わずウを選択できます。
データの整合性を守るためのロックという仕組み
データベースでは、複数の利用者が同時に同じデータに対して読み書きを行うことがあります。もし、ある人がデータを書き換えている最中に、別の人がそのデータを読み取ってしまったらどうなるでしょうか。書き換え途中の不完全なデータ(整合性がとれていないデータ)を読み取ってしまう恐れがあります。
これを防ぐために、データベース管理システム(DBMS)は排他制御を行います。具体的には、更新を行っている間、そのデータに対してロック(鍵)をかけます。このロックがかかっている間は、他の利用者はそのデータにアクセスできなくなり、ロックが解除されるまで待機することになります。これにより、常に正しく一貫性のあるデータを扱える状態が保障されます。
なぜ他の選択肢ではいけないのか
他の選択肢を検討すると、データの整合性が崩れる理由が見えてきます。
選択肢アの「更新処理を中断して参照させる」は、業務上の効率が悪すぎます。参照したい人がいるたびに更新を止めていては、いつまでたっても更新が完了しません。
選択肢イの「更新中の最新のデータを参照させる」は最も危険です。更新がまだ確定していない中途半端な値(例えば、計算の途中の数値など)を他の人が見てしまうと、間違った判断やさらなる誤った処理の原因になります。
選択肢エの「更新を破棄して更新前のデータを参照させる」は、更新しようとした人の作業を無効にしています。これではデータベースの内容が常に古いままになり、データの更新が正しく行われません。
現場で求められるトランザクションの考え方
この問題の背景には、トランザクションという重要な概念があります。トランザクションとは、データベースに対する一連の処理を一つの塊として扱う考え方です。
例えば銀行の振込処理では、「Aさんの口座から引き落とす」という処理と「Bさんの口座に入金する」という処理がワンセットになります。この両方が成功して初めてデータベースが更新されます。もし途中でエラーが起きたり、誰かが途中の状態を読み取ったりしてしまうと、お金が消えたり増えたりする重大なトラブルになります。
この問題のように、更新が終わるまで読み取りを待たせる仕組みは、システム開発やデータベース管理の現場において「いかにデータの正確性を維持するか」という極めて重要な設計方針そのものです。排他制御は、Webサイトの予約システムやオンラインショッピングなど、身近なあらゆるシステムで今日もデータの秩序を守っています。