SC Workbook
科目 A-2 · データベース

2 相ロッキングとデッドロック

トランザクション T1 は口座 A から口座 B へ,T2 は口座 B から口座 A へ振替を行う。T1,T2 は 2 相ロッキングプロトコルに従っており,次の順に処理が進んだ。 ① T1 が A の専有ロックを獲得して A を更新 ② T2 が B の専有ロックを獲得して B を更新 ③ T1 が B の専有ロックを要求 ④ T2 が A の専有ロックを要求 この後の状況として,適切なものはどれか。ここで,ロックを獲得できないトランザクションは,獲得できるまで待たされるものとする。

  1. ア2 相ロッキングプロトコルは直列化可能性を保証するので,③で T1 は待たされるが,④で T2 は A の専有ロックを獲得でき,T2 の終了後に T1 も B のロックを獲得して完了する。
  2. イT1 は①で A の更新を終えているので,③で B のロックを要求する前に A のロックを解放する。このため,④で T2 は A のロックを直ちに獲得でき,デッドロックにはならない。
  3. ウT1 は T2 が保持する B のロックの解放を,T2 は T1 が保持する A のロックの解放を待ち合うデッドロックとなり,いずれかのトランザクションをロールバックしなければ解消しない。
  4. エ③の時点で T1 が T2 のロックの解放待ちになるので,DBMS はこの時点でデッドロックが発生したと判断し,T1 をロールバックする。
正解と解説を見る

正解 ウ

この問題の基礎知識

  • 2 相ロッキングは,ロックを獲得するだけの相と解放するだけの相に分け,いったんロックを解放したら新たなロックを獲得しない方式であり,直列化可能性を保証する。
  • 2 相ロッキングはデッドロックを防止しない。デッドロックは,複数のトランザクションが互いに相手の保持するロックの解放を待ち,待ちが循環して進めなくなった状態である。
  • DBMS は待ちグラフなどで待ちの循環を検出し,いずれかのトランザクションをロールバックしてデッドロックを解消する。一方が他方を待っているだけで循環がなければデッドロックではない。
  • 専有ロック(排他ロック)が保持されている間,他のトランザクションはそのデータに共有ロックも専有ロックも獲得できない。
ア2 相ロッキングプロトコルは直列化可能性を保証するので,③で T1 は待たされるが,④で T2 は A の専有ロックを獲得でき,T2 の終了後に T1 も B のロックを獲得して完了する。

2 相ロッキングが保証するのは直列化可能性であり,デッドロックが起きないことは保証しない。A の専有ロックは T1 が保持したままなので,④で T2 は A のロックを獲得できない。

イT1 は①で A の更新を終えているので,③で B のロックを要求する前に A のロックを解放する。このため,④で T2 は A のロックを直ちに獲得でき,デッドロックにはならない。

2 相ロッキングでは,いったんロックを解放した後は新たなロックを獲得できない。T1 はこの後 B のロックを獲得する必要があるので,その前に A のロックを解放することはできない。

ウT1 は T2 が保持する B のロックの解放を,T2 は T1 が保持する A のロックの解放を待ち合うデッドロックとなり,いずれかのトランザクションをロールバックしなければ解消しない。正解

2 相ロッキングでは獲得相の間はロックを解放しないので,T1 は A を,T2 は B を保持したまま互いの解放を待つ。2 相ロッキングはデッドロックを防止しないので,DBMS は待ちの循環を検出していずれかをロールバックさせる必要がある。

エ③の時点で T1 が T2 のロックの解放待ちになるので,DBMS はこの時点でデッドロックが発生したと判断し,T1 をロールバックする。

③の時点では T1 が T2 を待っているだけで,T2 は T1 を待っていないので待ちの循環はなく,T2 が終了すれば T1 は処理を続けられる。デッドロックになるのは,④で T2 が T1 を待ち,待ちが循環した時点である。

検証用の出典出典照合済み
OMG Concurrency Service Specification, Version 1.0(1.4 Two-Phase Transactional Locking) / Eswaran et al., The Notions of Consistency and Predicate Locks in a Database System, Communications of the ACM, 1976
照合の根拠(6 件)

③の時点の待ちは T1→T2 だけで循環がない(エは誤り)。④で T2→T1 が加わり待ちが循環する。両者ともコミットできずロックは完了まで解放されないので,いずれかのロールバックが必要になる。

問題 ID A2-DBS-0504 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-08

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。