令和元年度 秋期 午前 問28
データベース
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 表に対して専有ロックを獲得することができない。
解説
ロックの種類と、ロックを掛ける広さという二つの軸で決まります。
この仕組みは、同時に触られると困る場所へロックを掛けて守ります。ロックには二種類あり、読むための共有ロックと書くための専有ロックがあります。共有ロックは、同じ場所へ幾つでも重ねられます。専有ロックは、ほかのどのロックとも重ねられません。加えて、ロックを掛ける広さにも段があります。表全体へ掛ける場合と、その中の一行だけへ掛ける場合です。広いロックと狭いロックは、範囲が重なるかどうかで衝突します。ある行に共有ロックが掛かっているとき、その行は表の一部です。だから、表全体へ専有ロックを掛けようとすると重なります。重なる以上、そのロックは掛けられません。一方、同じ表でも別の行なら範囲は重なりません。広さの包含を考えると、四つの肢は素直に割れます。ロックの広さは、表と行のどちらかに決まります。重なれば掛けられず、離れていれば掛けられます。
ほかの選択肢はなぜ違うのか
- アX が A 表内の特定行 a に対して共…:ある行に共有ロックがあるとき、別の行へ専有ロックを掛けられないと述べています。しかし二つの行は、互いに重なっていません。範囲が別なのですから、同時に掛けても差し支えありません。狭いロックどうしを、必要以上に排他的に扱っています。
- ウX が A 表に対して共有ロックを獲得し…:表全体に共有ロックがあるとき、表全体へ専有ロックを掛けられると述べています。同じ広さで完全に重なっている場面です。専有ロックはほかのロックと共存できません。この場合こそ、掛けられないと判断すべきところです。判定がちょうど裏返っています。
- エX が A 表に対して専有ロックを獲得し…:表全体に専有ロックがあるとき、その中の行へ専有ロックを掛けられると述べています。行は表に含まれるので、範囲は必ず重なります。広いほうに専有ロックがある以上、内側にも入り込めません。包含の関係を見落とした書き方です。段の上下を取り違えています。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:令和元年度 秋期 応用情報技術者試験 午前 問28
同じ用語が出る問題
- 令和7年度 秋期 午前 問29:多版同時実行制御に関する問題(トランザクション)
- 令和6年度 秋期 午前 問31:チェックポイントに関する記述(トランザクション)
- 令和6年度 秋期 午前 問27:ロールバックに関する問題(トランザクション)
- 令和6年度 秋期 午前 問12(トランザクション)
- 令和6年度 春期 午前 問55:SaaSに関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)