ホーム > データベーススペシャリスト試験 > 2017年
データベーススペシャリスト試験 2017年 午前2 問14
データベース更新における2相コミットに関する記述のうち, 適切なものはどれか。
ア:2相コミットは, トランザクションの処理途中のデータを他のトランザクションから参照できなくする制御方式のことである。
イ:2相コミットを行うためには, 同時に更新しようとする分散データベースの全てが更新可能かどうかを判断するためのやり取りが必要である。(正解)
ウ:2相コミットを採用している場合, ロールバックは発生しない。
エ:2相コミットを使えば, 通信異常が発生しても, トランザクションをコミットさせることができる。
解説
データベース更新における2相コミットに関する記述【午前2 解説】
要点まとめ
- 結論:2相コミットは分散データベースの全ノードが更新可能か確認するためのプロトコルである。
- 根拠:全ノードの準備完了を確認し、全体の一貫性を保つために「準備フェーズ」と「コミットフェーズ」の2段階で処理を行う。
- 差がつくポイント:通信異常時の動作やロールバックの発生有無、トランザクションの排他制御と混同しないことが重要。
正解の理由
選択肢イは、2相コミットの基本的な仕組みを正確に説明しています。2相コミットは分散環境でのトランザクション整合性を保つため、全ての参加ノードが「更新可能かどうか」を確認し、全員が承認した場合にのみコミットを実行します。この「全員合意」が2相コミットの核心であり、これにより部分的な更新によるデータ不整合を防ぎます。
よくある誤解
2相コミットはトランザクションの排他制御ではなく、分散トランザクションの整合性確保のための合意プロトコルです。通信異常時に必ずコミットできるわけではありません。
解法ステップ
- 2相コミットの目的を理解する(分散トランザクションの整合性確保)。
- 各選択肢の内容が2相コミットの特徴に合致しているか検証する。
- 「全ノードの更新可能性確認」が2相コミットの本質であることを確認。
- ロールバックや排他制御、通信異常時の動作についての誤解を排除。
- 正しい説明を含む選択肢を選ぶ。
選択肢別の誤答解説
- ア: トランザクションの排他制御(ロック機構)に関する説明であり、2相コミットの説明としては誤りです。
- イ: 全ノードの更新可能性を確認するためのやり取りが必要である点を正しく述べています。
- ウ: 2相コミットでもロールバックは発生します。ノードの一部が更新不可の場合は全体がロールバックされます。
- エ: 通信異常があれば2相コミットは待機状態になることが多く、必ずコミットできるわけではありません。
補足コラム
2相コミットは「準備フェーズ(prepare phase)」と「コミットフェーズ(commit phase)」の2段階で処理を行います。まず全ノードに「コミット準備できるか?」を問い合わせ、全員が「OK」と返答したらコミットを実行します。もし一部でも「NG」や通信障害があれば全体をロールバックします。これにより分散環境でもデータの一貫性を保てますが、通信障害時に処理がブロックされやすいという欠点もあります。
FAQ
Q: 2相コミットはどのような場面で使われますか?
A: 複数の分散データベースやシステム間で一貫したトランザクション処理を行う際に使われます。
A: 複数の分散データベースやシステム間で一貫したトランザクション処理を行う際に使われます。
Q: 2相コミットでロールバックは発生しますか?
A: はい。どこかのノードが更新不可の場合や通信障害があれば全体がロールバックされます。
A: はい。どこかのノードが更新不可の場合や通信障害があれば全体がロールバックされます。
Q: 2相コミットは通信異常時に必ずコミットできますか?
A: いいえ。通信異常があると処理がブロックされることがあり、必ずコミットできるわけではありません。
A: いいえ。通信異常があると処理がブロックされることがあり、必ずコミットできるわけではありません。
関連キーワード: 2相コミット, 分散トランザクション, データベース整合性, トランザクション管理, ロールバック