ITパスポート 2015年 春期 問77
問題文
DBMSにおいて、データへの同時アクセスによる矛盾の発生を防止し、データの一貫性を保つための機能はどれか。
選択肢
ア:正規化
イ:デッドロック
ウ:排他制御(正解)
エ:リストア
🔒 解説は解答すると表示されます
DBMSにおいて、データへの同時アクセスによる矛盾の発生を防止し、データの一貫性を保つための機能はどれか。【ITパスポート 解説】
正解の理由
問題文のキーワードは「同時アクセス」「矛盾」「一貫性」。ここで言う DBMS(Database Management System:データを保存・管理・提供するソフトウェア)は、複数の利用者や処理が同時にデータを扱ってもデータが壊れないようにする機能を持ちます。その中で、アクセスが重なったときに「どの処理がいつデータを変更できるか」を制御して矛盾(例:残高が二重に引かれる)を防ぐ機能が必要です。
この役割を果たすのが ウ:排他制御(はい・た・せい・ぎょ、英: mutual exclusion / locking)。排他制御は、ある処理がデータを更新している間は他の処理の更新を一時的に止める(あるいは順番をつける)ことで、同時実行による不整合を防ぎます。したがって、データの一貫性確保という問に対して最も適切なのは ウ です。
解法ステップ
- 問題文から重要語を拾う:「同時アクセス」「矛盾」「一貫性」。
- 各選択肢の意味を短く思い出す。
- 正規化 = データ設計で冗長を減らす。
- デッドロック = 互いに待ち合って処理が止まる状態。
- 排他制御 = 同時にアクセスできないように制御する仕組み。
- リストア = バックアップから戻す操作。
- 「同時アクセスによる矛盾を防ぐ」機能は「同時実行を制御するもの」だと判断する。
- 排他制御が該当するので選ぶ。
選択肢別の誤答解説
- ア: 正規化(Normalization:データベース設計で重複を減らす手法)
- 正規化はデータ構造を整理して更新時の異常(更新漏れや矛盾)を減らしますが、同時に複数の処理が走る際のアクセス制御(誰がいつ書き込むか)を直接扱うものではありません。よって今回の問いには不適切です。
- イ: デッドロック(Deadlock:複数処理が互いに資源を待って停止する状態)
- デッドロックは「問題(障害)の名前」です。排他制御やロックの結果として発生することがあり、矛盾を防ぐための機能ではなく、むしろ対処や回避が必要な現象です。
- ウ: 排他制御(exclusive control / locking)
- 同時アクセスを制限して競合(レースコンディション)を防ぎます。これにより更新時の矛盾を防ぎ、データの一貫性を保てます。従って正解です。
- エ: リストア(Restore:バックアップからデータを戻す操作)
- リストアは障害後にデータを復旧する操作であり、同時アクセス時の矛盾防止機能ではありません。
よくある誤解
- 「正規化すれば同時アクセスの問題も解決する」
- 正規化は構造的な問題(冗長や更新異常)を減らしますが、同時実行時のタイミング競合は排他制御などの実行時の仕組みで扱います。
- 「排他制御=必ずロックすること」
- 排他制御はロック方式(悲観的制御)以外に、楽観的同時制御(バージョン管理など)もあります。どちらも同時実行の矛盾を防ぐ手法です。
- 「デッドロックは排他制御と同じもの」
- デッドロックは排他制御の運用によって発生しうる副作用で、目的(矛盾防止)ではありません。運用で検出・回復・回避する仕組みが必要です。
補足コラム
- トランザクションと ACID
- トランザクション(transaction):データベースでの一連の処理単位。例えば「口座Aから引き落とし、口座Bに入金」の一連を1トランザクションにする。
- ACID はトランザクションの望ましい性質の頭文字(Atomicity, Consistency, Isolation, Durability)。ここで「Isolation(独立性)」が同時実行制御に関係します。排他制御は Isolation を実現するための主要な手段です。
- 排他制御の実装例(簡単に)
- ロック方式(悲観的制御):読み書きの際にロックを取り、他が変更できないようにする。
- 楽観的同時制御:更新時に競合がなかったかを確認(バージョン番号など)して、競合があれば再試行する。
- 身近な例:スーパーのレジで同じ値引きクーポンを同時に使えないようにレジで「使用済み」フラグを立てるイメージが排他制御です。
FAQ
Q1: 排他制御は常にロックを使いますか?
A1: いいえ。ロック(悲観的)は一般的ですが、楽観的同時制御(バージョンチェックなど)もあります。用途や負荷に応じて使い分けます。
A1: いいえ。ロック(悲観的)は一般的ですが、楽観的同時制御(バージョンチェックなど)もあります。用途や負荷に応じて使い分けます。
Q2: デッドロックが起きたらどうなる?
A2: 関係する処理が停止します。DBMSは検出して一方を強制終了(ロールバック)するなどの回復手段を持つことが多いです。
A2: 関係する処理が停止します。DBMSは検出して一方を強制終了(ロールバック)するなどの回復手段を持つことが多いです。
Q3: 正規化は不要ですか?
A3: 正規化はデータの整合性を保つため重要です。ただし、同時実行の矛盾は排他制御で扱います。両方が必要な観点が異なる問題です。
A3: 正規化はデータの整合性を保つため重要です。ただし、同時実行の矛盾は排他制御で扱います。両方が必要な観点が異なる問題です。
Q4: リストアは同時アクセスの防止に使えますか?
A4: いいえ。リストアは障害後の復旧作業であり、運用中の同時アクセス制御機能ではありません。
A4: いいえ。リストアは障害後の復旧作業であり、運用中の同時アクセス制御機能ではありません。
関連キーワード: DBMS、データベース、トランザクション、同時実行制御、排他制御、デッドロック、正規化、リストア、ACID、ロック、楽観的同時制御

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

