ホーム > データベーススペシャリスト試験 > 2013年
データベーススペシャリスト試験 2013年 午前2 問13
2相コミットで分散トランザクションの原子性を保証する場合、ネットワーク障害の発生によって参加者のトランザクションが、コミットすべきかロールバックすべきかを判断できなくなることがある。このような状況を発生させるネットワーク障害に関する説明として、適切なものはどれか。
ア:調停者のトランザクションが、コミット又はロールバック可否の問合せを参加者に送る直前に障害になった。
イ:調停者のトランザクションが、コミット又はロールバックの決定を参加者に送る直前に障害になった。(正解)
ウ:調停者のトランザクションに、コミット又はロールバック可否の応答を参加者が返す直前に障害になった。
エ:調停者のトランザクションに、コミット又はロールバックの完了を参加者が返す直前に障害になった。
解説
# 2相コミットにおけるネットワーク障害と判断不能状態の解説
## 2相コミットの概要
分散トランザクションの**原子性**を保証するために、2相コミット(Two-Phase Commit, 2PC)が使われます。これは以下の2段階から構成されます。
1. **準備フェーズ(フェーズ1)**
調停者(Coordinator)が各参加者(Participant)に「コミットしてもよいか?」と問い合わせ、参加者は「準備完了(コミット可能)」か「ロールバック(不可)」の応答を返す。
2. **コミットフェーズ(フェーズ2)**
調停者がすべての参加者から「コミット可能」の応答を受け取れば、「コミットしてよい」と通知し、そうでなければ「ロールバックしよ」と通知する。
## 問題点:判断不能状態(Uncertain/Blocked状態)
2相コミットの最大の課題は、**ネットワーク障害や障害発生時に、参加者がトランザクションをコミットすべきかロールバックすべきかを判断できなくなることがある**点です。これを**判断不能状態**と呼びます。
この状態に陥ると、参加者は「調停者からの最終決定通知が届くまで待つ」しかなく、トランザクションの確定処理が滞ってしまいます。
---
## 問題文の選択肢の検討
| 選択肢 | 内容 | 判断不能状態になるか? |
|--------|------------------------------------------------------------|----------------------------------|
| ア | 調停者が問い合わせを参加者に送る**直前に障害発生** | 参加者はまだ何も動作していないので影響少ない |
| イ | 調停者がコミットまたはロールバックの決定を参加者に送る**直前に障害発生** | 参加者はコミットを保留しており、調停者からの通知を待つ必要があるため判断不能になる |
| ウ | 調停者に参加者がコミット可否の応答を返す直前に障害発生 | 調停者は参加者からの応答を未受領なので、コミット判断自体が進まないがこの段階では判断不能とは言いにくい|
| エ | 調停者に参加者が完了報告を返す直前に障害発生 | この段階では意思決定は既にされており、障害はほとんど影響しない |
---
## なぜ選択肢「イ」が正解なのか
- **調停者が最終決定(コミット or ロールバック)を参加者に送る直前に障害が起こると、参加者は最終決定を知らずに待ち続けるしかなくなる。**
- 参加者は準備済み状態であり、コミットして良いかロールバックすべきか判断できなくなります。これが判断不能状態の典型的なケースです。
- したがって、この状況が**2相コミットにおけるネットワーク障害による判断不能状態の原因**となります。
---
## まとめ
- 2相コミットは原子性を保証するが、調停者と参加者間の通信障害が判断不能状態を生む。
- 参加者が「コミット?ロールバック?」の指示を待っている段階で調停者に障害が起こると、参加者は動けなくなる。
- 問題中の選択肢でこれに該当するのは「イ:調停者の決定を参加者に送る直前に障害になった」場合である。
---
以上より、正解は**イ**です。