基本情報技術者 2010年 春期 午前(科目A) 問32
問題文
DBMS において、同じデータを複数のプログラムが同時に更新しようとしたときに、データの矛盾が起きないようにするための仕組みはどれか。
選択肢
ア:アクセス権限
イ:機密保護
ウ:排他制御(正解)
エ:リカバリ制御
🔒 解説は解答すると表示されます
排他制御(同時更新防止)【午前解説】
正解の理由
選択肢の中で、同一データに対する「同時更新」を直接制御してデータの不整合を防ぐ仕組みは排他制御です。排他制御はトランザクション単位でロックを取得したり、楽観的制御やMVCCで更新競合を検出・解決したりして、原子性・一貫性・独立性(Isolation)を確保します。したがって正解は ウ(排他制御)です。
解法ステップ
- 設問文のキーワードを確認:「同じデータ」「同時に更新」「矛盾が起きないように」。
- キーワードから問われる領域を特定:「同時実行制御(Concurrency control)」と判断。
- 各選択肢の目的を比較:アクセス制御(認可)、機密保護(Confidentiality)、排他制御(Concurrency)、リカバリ(Recovery)。
- 同時更新の矛盾防止に直接対応するものを選択:排他制御(ウ)。
選択肢別の誤答解説
- ア: アクセス権限
誤り。ユーザやプログラムの操作可否を制御するもので、同時更新による整合性維持は目的外です。 - イ: 機密保護
誤り。データの秘匿性や情報漏えい防止が主目的で、同時更新の競合制御とは関係ありません。 - ウ: 排他制御
正解。ロックや楽観的制御、MVCCなどで同時更新の競合を防ぎ、データの整合性を保ちます。 - エ: リカバリ制御
誤り。障害からの復旧(ログ適用やロールバック等)が目的で、同時更新の防止とは用途が異なります。
よくある誤解
- アクセス権限(ア)と混同しやすい:アクセス権限は「誰が何をできるか」を制御するもので、同時更新による競合の防止が目的ではありません。
- リカバリ制御(エ)は障害復旧が目的:障害時にログから状態を戻す機能で、並行更新の制御とは役割が異なります。
- 排他制御=単純ロックと限らない:悲観的ロックだけでなく、楽観的制御やMVCCなど複数の実装方式がある点を押さえておく必要があります。
補足コラム
- 排他制御の実装例には悲観的制御(排他ロック/共有ロック)と楽観的制御(更新時に衝突検出)があり、DBMSによってMVCC(多版並行制御)を採用することも多いです。
- トランザクション分離レベル(例:SERIALIZABLE、REPEATABLE READ、READ COMMITTED)は、同時実行時の現象(ダーティリード、非反復読取、ファントム等)をどう許容するかを定めます。
- 排他制御は強力ですが、デッドロックや性能低下を引き起こす可能性があるため、適切な設計と運用(タイムアウトやデッドロック検出)が必要です。
例:SQLでの悲観的ロック(簡易)
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
上のように更新前にロックを取得することで並行更新を防ぎます。
FAQ
Q1: 排他制御とトランザクションは同じですか?
A1: 違います。トランザクションは操作の単位であり、排他制御はそのトランザクション間の同時実行を管理する手段です。両者はセットで使われます。
A1: 違います。トランザクションは操作の単位であり、排他制御はそのトランザクション間の同時実行を管理する手段です。両者はセットで使われます。
Q2: MVCCは排他制御に含まれますか?
A2: はい。MVCCは「排他制御の一手法」で、読み取りと書き込みを版本管理でひとまず分離し、整合性を保ちます。
A2: はい。MVCCは「排他制御の一手法」で、読み取りと書き込みを版本管理でひとまず分離し、整合性を保ちます。
Q3: リカバリ制御が同時更新問題を解決することはありますか?
A3: 直接はしません。リカバリは障害復旧用で、同時実行による論理矛盾を防ぐ機構ではありません。ただし、障害後に整合性を回復する役割は担います。
A3: 直接はしません。リカバリは障害復旧用で、同時実行による論理矛盾を防ぐ機構ではありません。ただし、障害後に整合性を回復する役割は担います。
関連キーワード: 排他制御、ロック、トランザクション、MVCC、悲観的制御、楽観的制御、分離レベル、デッドロック、同時実行制御、更新競合、整合性

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

