ホーム > データベーススペシャリスト試験 > 2016年
データベーススペシャリスト試験 2016年 午前2 問14
分散データベースシステムにおいて, 複数のデータベースを更新する場合に用いられる2相コミットの処理手順として, 適切なものはどれか。
ア:主サイトが各データベースサイトにコミット準備要求を発行した場合, 各データベースサイトは, 準備ができていない場合だけ応答を返す。
イ:主サイトは, コミットが可能であることを各データベースサイトに確認した後, コミットを発行する。(正解)
ウ:主サイトは, 各データベースサイトにコミットを発行し, コミットが失敗した場合には、再度コミットを発行する。
エ:主サイトは, 各データベースサイトのロックに成功した後, コミットを発行し, 各データベースサイトをアンロックする。
解説
2相コミットプロトコルの処理手順と選択肢の解説
2相コミットとは
分散データベースシステムにおける2相コミット(Two-Phase Commit)は、複数のデータベース(ノード)に対する更新処理を全て成功させるか、全てキャンセル(ロールバック)するかを保証するためのプロトコルです。これにより、一貫性が保たれ、途中で処理が中断して不整合が起きることを防ぎます。
2相コミットの処理手順
2相コミットは、その名前の通り2つのフェーズに分かれています。
1. 準備フェーズ (Prepare Phase)
- コーディネータ(主サイト)が各参加ノード(各データベースサイト)へ、「コミットしても良いか?」とコミット準備要求 (prepare request) を送る。
- 各参加ノードは、ローカルトランザクションを適用しても良い状態(ロックを確保できるなど)であれば「準備OK(commit OK)」の応答を返す。
- もし何らかの問題でコミットできなければ「準備不可(abort)」の応答を返す。
2. コミットフェーズ (Commit Phase)
- コーディネータは、全ての参加ノードから「準備OK」の応答が返って来たら、今度は「コミットを実行しろ」というコミット命令 (commit command) を参加ノードに送る。
- 各ノードはコミットを実施し、ロックを解除する。
- 逆にもし一つでも「準備不可」があった場合は、コーディネータは「ロールバック命令 (abort command)」を送る。
選択肢の評価
まとめ
2相コミットの正しい流れは:
- 主サイトが各データベースサイトにコミット準備要求を送り、状態を確認する。
- 全ての参加サイトが「準備OK」と回答したら、主サイトがコミット命令を送信し、
- 各サイトがコミットを実行し、完了報告を返す。
このことから、選択肢イの処理手順が最も適切な説明となります。