データベーススペシャリスト試験 2012年 午前212


分散データベースのトランザクションは複数のサブトランザクションに分割され, 複数のサイトで実行される。このとき, トランザクションのコミット制御に関する記述のうち, 適切なものはどれか。
2相コミットでは, 全てのサブトランザクションからコミット了承応答が届いても、必ずしも全てのサブトランザクションをコミットするとは限らない。
2相コミットを用いても、サブトランザクションが実行されるサイトに主サイトの指示が届かず, サブトランザクションをコミットすべきかロールバックすべきか分からない場合がある。(正解)
2相コミットを用いると, サブトランザクションがロールバックされてもトランザクションがコミットされる場合がある。
集中型データベースのコミット制御である1相コミットで、個々のサイトが独自に分散データベースのコミットを行っても, サイト間のデータベースの一貫性は保証できる。

解説

分散データベースのトランザクションのコミット制御【午前2 解説】

要点まとめ

  • 結論:分散トランザクションの2相コミットでは、指示の遅延や通信障害によりサブトランザクションが状態不明になることがある。
  • 根拠:2相コミットは準備フェーズとコミットフェーズに分かれ、全参加者の合意が必要だが、通信障害で指示が届かない場合が存在する。
  • 差がつくポイント:2相コミットの仕組みとその限界を理解し、通信障害時の状態不整合リスクを正しく把握することが重要。

正解の理由

選択肢イは、2相コミットの特徴を正確に表しています。2相コミットは「準備(prepare)」フェーズで全サブトランザクションがコミット可能かを確認し、「コミット(commit)」フェーズで実際にコミット指示を出します。しかし、通信障害などでコミット指示が届かない場合、サブトランザクションはコミットすべきかロールバックすべきか判断できず、状態が不明になることがあります。これが2相コミットの典型的な問題点であり、選択肢イはこの点を正しく述べています。

よくある誤解

2相コミットは必ず全サブトランザクションをコミットまたはロールバックさせるため、途中で状態が不明になることはないと誤解されがちです。実際には通信障害などで状態不明が発生するリスクがあります。

解法ステップ

  1. 分散トランザクションが複数のサブトランザクションに分割されることを理解する。
  2. 2相コミットの「準備フェーズ」と「コミットフェーズ」の流れを確認する。
  3. 各サブトランザクションがコミット可能かを準備フェーズで確認する点を押さえる。
  4. 通信障害などでコミット指示が届かない場合の状態不明リスクを考慮する。
  5. 選択肢の記述が2相コミットの仕組みと矛盾しないかを検証する。

選択肢別の誤答解説

  • ア: 「全てのサブトランザクションからコミット了承応答があっても必ずしもコミットしない」は誤り。2相コミットでは全員が了承すれば必ずコミットする。
  • イ: 正解。通信障害でコミット指示が届かず、状態不明になる可能性がある点を正しく述べている。
  • ウ: 「サブトランザクションがロールバックされてもトランザクションがコミットされる」は誤り。全員の合意がなければコミットされない。
  • エ: 1相コミットは集中型データベース向けであり、分散データベースの一貫性は保証できないため誤り。

補足コラム

2相コミットは分散トランザクションの整合性を保つ基本的なプロトコルですが、通信障害時に状態が不明になる「ブロッキング問題」があります。これを解決するために3相コミットや分散ロック、タイムアウト機構などの拡張手法が研究されています。

FAQ

Q: 2相コミットで全サブトランザクションがコミット了承したら必ずコミットされますか?
A: はい、全員が了承すればコミットされますが、通信障害で指示が届かない場合は状態不明になることがあります。
Q: 1相コミットは分散データベースで使えますか?
A: 1相コミットは集中型データベース向けで、分散環境では一貫性を保証できません。

関連キーワード: 分散トランザクション, 2相コミット, コミット制御, データベース一貫性, トランザクション管理
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ