令和3年度 秋期 午前Ⅱ 問14
トランザクション処理
排他制御に関する問題
RDBMS のロックに関する記述のうち,適切なものはどれか。ここで,X,Y はトランザクションとする。
- アX が A 表内の特定行 a に対して共有ロックを獲得しているときは,Y は A 表内の別の特定行 b に対して専有ロックを獲得することができない。
- イX が A 表内の特定行 a に対して共有ロックを獲得しているときは,Y は A 表に対して専有ロックを獲得することができない。
- ウX が A 表に対して共有ロックを獲得しているときでも,Y は A 表に対して専有ロックを獲得することができる。
- エX が A 表に対して専有ロックを獲得しているときでも,Y は A 表内の特定行 a に対して専有ロックを獲得することができる。
答えと解説を見る
✓ これが正解イX が A 表内の特定行 a に対して共有ロックを獲得しているときは,Y は A 表に対して専有ロックを獲得することができない。
解説
行 a に共有ロックがある間は、その行を含む表全体の専有ロックは取れません。
表全体へのロックと表内の行へのロックは、表が行を含むという関係を踏まえて両立するかが判断されます。X が A 表の行 a に共有ロックを掛けているということは、A 表の一部が読まれている最中だということです。ここで Y が A 表全体に専有ロックを掛けると、行 a を含む表全体を Y が更新できる状態になり、X の共有ロックと衝突します。そのため Y は、X がロックを解除するまで A 表への専有ロックを獲得できません。DBMS は行にロックを掛けるとき表にも目印となるロックを置き、表単位の要求との衝突をすばやく判定します。共有ロックどうしは両立し、専有ロックはどの相手とも両立しない、という基本に、表は行を含むという関係を重ねて判断するのが解き方です。
ほかの選択肢はなぜ違うのか
- アX が A 表内の特定行 a に対して共…:X が共有ロックを掛けているのは行 a であり、Y が専有ロックを求めているのは別の行 b です。対象の行が重ならないので衝突は起きず、Y は行 b に専有ロックを獲得できます。
- ウX が A 表に対して共有ロックを獲得し…:X が A 表全体を共有ロックで読んでいる間に、Y が同じ表へ専有ロックを掛けると、読んでいる最中のデータが書き換えられ得ます。共有ロックと専有ロックは両立しないので、Y は待たされます。
- エX が A 表に対して専有ロックを獲得し…:X が A 表全体に専有ロックを掛けている間は、その表に含まれる行 a も X が独占している状態です。Y が行 a に専有ロックを掛けると重なってしまうため、獲得はできません。
この問題の用語
- 排他制御同じデータを同時に更新しても、矛盾が起きないようにする仕組みです。先の処理が終わるまで、後の処理を待たせて防ぎます。
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問14
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和3年度 秋期 午前Ⅱ 問16:MVCCに関する問題(排他制御)
- 平成29年度 春期 午前Ⅱ 問18:排他制御に関する問題(排他制御)
- 平成25年度 春期 午前Ⅱ 問14:ロールフォワードに関する問題(排他制御)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)