平成29年度 春期 データベーススペシャリスト試験 午前II 問18
【問題18】
RDBMSのロックに関する記述のうち,適切なものはどれか。ここで,X,Yはトランザクションとする。
XがA表内の特定行aに対して共有ロックを獲得しているときは,YはA表内の別の特定行bに対して専有ロックを獲得することができない。
XがA表内の特定行aに対して共有ロックを獲得しているときは,YはA表に対して専有ロックを獲得することができない。
XがA表に対して共有ロックを獲得しているときでも,YはA表に対して専有ロックを獲得することができる。
XがA表に対して専有ロックを獲得しているときでも,YはA表内の特定行aに対して専有ロックを獲得することができる。
【解説】
ロックの種類と特性
- 共有ロック(Sロック): データの読み取りを許可しますが、書き込み(更新)操作はロックが解除されるまで許可されません。複数のトランザクションが同時に共有ロックを持つことができます。
- 専有ロック(Xロック): データの読み取りと書き込みの両方を許可しますが、他のトランザクションが同時にそのデータにアクセスすることを禁止します。
各選択肢の検討
ア: XがA表内の特定行aに対して共有ロックを獲得しているときは,YはA表内の別の特定行bに対して専有ロックを獲得することができない。
誤り。共有ロックは行単位で適用されるため、Xが特定行aに共有ロックを持っていても、Yが特定行bに専有ロックを獲得することは可能です。
イ: XがA表内の特定行aに対して共有ロックを獲得しているときは,YはA表に対して専有ロックを獲得することができない。
正しい。共有ロックが行単位ではなく表全体に適用されている場合、他のトランザクションが表全体に対して専有ロックを獲得することはできません。
ウ: XがA表に対して共有ロックを獲得しているときでも,YはA表に対して専有ロックを獲得することができる。
誤り。共有ロックが表全体に適用されている場合、他のトランザクションが表全体に専有ロックを獲得することはできません。
エ: XがA表に対して専有ロックを獲得しているときでも,YはA表内の特定行aに対して専有ロックを獲得することができる。
誤り。専有ロックが適用されているデータには、他のトランザクションが共有ロックや専有ロックを獲得することはできません。
【答え】
イ: XがA表内の特定行aに対して共有ロックを獲得しているときは,YはA表に対して専有ロックを獲得することができない。
出典:平成29年度 春期 データベーススペシャリスト試験 午前II 問18