データベーススペシャリスト 2016年 午前2 問14
問題文
分散データベースシステムにおいて、複数のデータベースを更新する場合に用いられる2相コミットの処理手順として、適切なものはどれか。
選択肢
ア:主サイトが各データベースサイトにコミット準備要求を発行した場合、 各データベースサイトは、 準備ができていない場合だけ応答を返す。
イ:主サイトは、 コミットが可能であることを各データベースサイトに確認した後、 コミットを発行する。(正解)
ウ:主サイトは、 各データベースサイトにコミットを発行し、 コミットが失敗した場合には、再度コミットを発行する。
エ:主サイトは、 各データベースサイトのロックに成功した後、 コミットを発行し、 各データベースサイトをアンロックする。
分散データベースシステムにおける2相コミットの処理手順【午前2 解説】
要点まとめ
- 結論:2相コミットは「準備完了の確認後にコミットを実行」する手順であり、イが正解です。
- 根拠:主サイトが全参加サイトのコミット準備完了を確認してからコミット命令を出すことで、一貫性と原子性を保証します。
- 差がつくポイント:準備段階での全サイトの応答確認と、コミットの一斉実行が正確に理解できているかが重要です。
正解の理由
2相コミットは分散トランザクションの整合性を保つためのプロトコルで、以下の2段階で処理が行われます。
- 準備フェーズ(Prepare phase):主サイトが各データベースサイトに「コミット準備要求」を送り、各サイトは準備ができているか応答します。
- コミットフェーズ(Commit phase):全サイトが準備完了を返した場合にのみ、主サイトが「コミット命令」を発行し、全サイトでコミットを実行します。
この流れを正しく表しているのが選択肢イです。
よくある誤解
2相コミットは単にコミット命令を送るだけでなく、全サイトの準備完了を確認することが必須です。準備ができていないサイトがあってもコミットを強行することはありません。
解法ステップ
- 問題文の「複数のデータベースを更新する場合に用いられる2相コミットの処理手順」を確認する。
- 2相コミットの基本的な流れ(準備要求→準備確認→コミット命令)を思い出す。
- 各選択肢がこの流れに合致しているかを検証する。
- 「準備ができているかの確認後にコミットを発行する」選択肢を選ぶ。
選択肢別の誤答解説
- ア:準備ができていない場合だけ応答を返すのは誤り。実際は準備完了か否かを明確に応答します。
- イ:正解。全サイトの準備完了を確認後にコミットを発行する正しい手順です。
- ウ:コミット失敗時に再度コミットを発行するのは誤り。失敗時はロールバックなどの処理が必要です。
- エ:ロック成功後にコミットを発行するのは一部正しいが、ロック解除のタイミングや準備確認のフェーズが抜けています。
補足コラム
2相コミットは分散トランザクションの整合性を保つための基本的なプロトコルですが、ネットワーク障害やサイト障害時に処理が停止する「ブロッキング問題」があります。これを解決するために3相コミットやPaxosなどの分散合意アルゴリズムが研究されています。
FAQ
Q: 2相コミットで全サイトが準備完了しなかった場合はどうなる?
A: 主サイトはコミットを中止し、全サイトにロールバック命令を送って処理を取り消します。
A: 主サイトはコミットを中止し、全サイトにロールバック命令を送って処理を取り消します。
Q: 2相コミットはどのような場面で使われる?
A: 複数のデータベースにまたがるトランザクションで、一貫性を保証したい場合に使われます。
A: 複数のデータベースにまたがるトランザクションで、一貫性を保証したい場合に使われます。
関連キーワード: 分散トランザクション、2相コミット、データベース整合性、トランザクション管理、分散システム

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

