令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問14
RDBMSのロックに関する記述のうち,適切なものはどれか。ここで,X,Yはトランザクションとする。
解答・解説
正解: イ. XがA表内の特定行aに対して共有ロックを獲得しているときは,YはA表に対して専有ロックを獲得することができない。
RDBMSにおいて、トランザクションがデータを参照・更新する際の一貫性を保つためのロックには、主に以下の2種類があります。
- 共有ロック(Sロック):データを「参照」する際に獲得します。他のトランザクションも同時に共有ロックを獲得して参照することはできますが、専有ロックを獲得して更新することはできません。
- 専有ロック(Xロック):データを「更新(追加・変更・削除)」する際に獲得します。他のトランザクションは共有ロックも専有ロックも獲得できません。
また、ロックをかける対象の範囲(ロックの粒度)には、行単位、表(テーブル)単位などがあります。特定の行がロックされている場合、その行を含む表全体に対して競合するロックをかけることは制限されます。
トランザクションXがA表内の特定行aに対して共有ロックを獲得している場合、この行aに対して他のトランザクションは更新のための専有ロックを獲得できません。したがって、行aを含む「A表全体」に対しても、他のトランザクションYは専有ロックを獲得することができなくなります。よって、イが適切な記述となります。
各選択肢の解説
- ア: 誤り。XがA表の特定行aに共有ロックを獲得していても、ロックの対象範囲が異なるため、YはA表内の別の特定行bに対して専有ロックを獲得することができます。
- イ: 正解。XがA表の特定行aに共有ロックを獲得しているため、Yは行aを包含するA表全体に対して専有ロックを獲得することはできません(表全体への専有ロックは、すでに行aにかかっている共有ロックと競合するため)。
- ウ: 誤り。XがA表全体に対して共有ロックを獲得している場合、表全体が参照状態となり他のトランザクションからの更新を防ぐため、YはA表に対して専有ロックを獲得することはできません。
- エ: 誤り。XがA表全体に対して専有ロックを獲得している場合、表内のすべての行が独占されている状態です。したがって、YはA表内のいかなる特定行に対しても専有ロックを獲得することはできません。