システムアーキテクト試験 2012年 午前222


RDBMSのロックに関する記述のうち、適切なものはどれか。ここで、X、Yはトランザクションとする。
XがA表内の特定行aに対して共有ロックを獲得しているときは、YはA表内の別の特定行bに対して専有ロックを獲得することができない。
XがA表内の特定行aに対して共有ロックを獲得しているときは、YはA表に対して専有ロックを獲得することができない。(正解)
XがA表に対して共有ロックを獲得しているときでも、YはA表に対して専有口ックを獲得することができる。
XがA表に対して専有ロックを獲得しているときでも、YはA表内の特定行aに対して専有ロックを獲得することができる。

解説

RDBMSのロックに関する問題【午前2 解説】

要点まとめ

  • 結論:共有ロックを獲得しているトランザクションがある場合、他のトランザクションは同じ表に対して専有ロックを獲得できません。
  • 根拠:共有ロックは読み取りのために複数トランザクションが同時に保持可能ですが、専有ロックは書き込みのために排他制御が必要だからです。
  • 差がつくポイント:行単位ロックと表単位ロックの違いを理解し、共有ロックと専有ロックの互換性を正確に把握することが重要です。

正解の理由

選択肢イは「XがA表内の特定行aに対して共有ロックを獲得しているときは、YはA表に対して専有ロックを獲得できない」と述べています。
共有ロックは読み取り用で複数トランザクションが同時に保持可能ですが、専有ロックは書き込み用で排他制御が必要です。
表全体に対する専有ロックは、表内の一部に共有ロックが存在する限り取得できません。これが正しい動作です。

よくある誤解

行単位の共有ロックがある場合でも、別行に専有ロックが取れないと誤解されがちです。
また、共有ロックと専有ロックの互換性を混同し、同時に取得可能と考える誤りも多いです。

解法ステップ

  1. 共有ロックと専有ロックの基本的な意味を確認する(共有=読み取り、専有=書き込み)。
  2. 行ロックと表ロックの違いを理解する。
  3. 共有ロックが存在する場合の専有ロック取得の可否を考える。
  4. 選択肢の記述がこのルールに合致しているかを判断する。
  5. 最も正確な記述を選ぶ。

選択肢別の誤答解説

  • ア: 「別の特定行bに対して専有ロックを獲得できない」は誤り。行単位ロックなら別行は専有ロック可能。
  • : 正解。共有ロックがある行のある表に対して専有ロックは取得不可。
  • ウ: 共有ロックがある表に専有ロックを取得できるのは誤り。排他制御の観点から不可能。
  • エ: 専有ロックがある表に対して別のトランザクションが専有ロックを取得できるのは誤り。排他制御違反。

補足コラム

RDBMSのロックはデータの整合性を保つために不可欠です。
共有ロックは複数トランザクションの同時読み取りを許し、専有ロックは書き込み時に排他制御を行います。
行単位ロックは細かい制御が可能で、表単位ロックは広範囲の排他制御に使われます。
これらの理解はデータベースのパフォーマンスと整合性管理に直結します。

FAQ

Q: 共有ロックと専有ロックは同時に存在できますか?
A: 同じ対象(行や表)に対しては存在できません。共有ロックは複数可能ですが、専有ロックは排他制御のため単独です。
Q: 行単位ロックと表単位ロックはどちらが効率的ですか?
A: 一般に行単位ロックの方が細かく制御でき、並行処理性能が高いですが、管理コストが増えます。
Q: 専有ロックが解除されるタイミングは?
A: 通常はトランザクションのコミットまたはロールバック時に解除されます。

関連キーワード: 共有ロック, 専有ロック, 行ロック, 表ロック, 排他制御, トランザクション管理, データベースロック
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ