最終更新日:2026年7月15日
fe fe-technology database
まず結論
2相コミットとは、分散データベースで、複数サイトの更新を「全員で確定」または「全員で中止」にそろえる仕組みです。
基本情報技術者試験では、次の表現が決め手になります。
複数サイトへ更新可能か問い合わせる
+
すべてのサイトが可能なら確定する
→ 2相コミット
いきなり更新を確定せず、まず全参加者へ確認し、その後に全体を確定または中止する点が重要です。
直感的な説明
2相コミットは、全員に準備できたか確認してから、一斉に実行する仕組みと考えると分かりやすいです。
例えば、複数の支店で同じ取引に関するデータを更新するとします。
支店A:更新成功
支店B:更新失敗
このように一部だけ更新されると、データのつじつまが合わなくなります。
そこで、最初に全支店へ確認します。
調停者:
「全員、更新を確定できる状態ですか?」
全員が「できます」と答えた場合だけ、確定を指示します。
全員が可
→ 全員コミット
1つでも「できません」があれば、全体を中止します。
1つでも不可
→ 全員ロールバック
定義・仕組み
2相コミットでは、中心となる調停者と、更新に参加する参加者が登場します。
| 役割 | すること |
|---|---|
| 調停者 | 各参加者へ可否を問い合わせ、最終指示を出す |
| 参加者 | 更新を確定できるか回答し、最終指示に従う |
処理は2段階に分かれます。
第1相:準備・確認
調停者が、各参加者にコミット可能か問い合わせます。
参加者は、更新を確定できる状態なら「可」、できない場合は「不可」と回答します。
この段階では、まだ最終確定しません。
調停者
→ 参加者A:コミット可能?
→ 参加者B:コミット可能?
→ 参加者C:コミット可能?
第2相:確定・中止
すべての参加者が「可」なら、調停者は全員へコミットを指示します。
A:可
B:可
C:可
→ 全員コミット
1つでも「不可」がある場合は、全員へロールバックを指示します。
A:可
B:不可
C:可
→ 全員ロールバック
2相コミットは、この仕組みによって、分散環境でもトランザクションの原子性を保とうとします。
全サイト更新
または
全サイト未更新
のどちらかにそろえます。
公式の出題範囲やシラバスは、IPA:基本情報技術者試験から確認できます。
科目Aでどう出る?
科目Aでは、問題文の表現から方式を選ばせる問題が中心です。
| 問題文の表現 | 選ぶ用語 |
|---|---|
| 複数サイトに更新可能か問い合わせる | 2相コミット |
| 全参加者の合意後に一斉に確定する | 2相コミット |
| 同じデータへの同時アクセスを制限する | 排他制御 |
| 未確定の更新を処理前へ戻す | ロールバック |
| ログを使って更新を再実行し復旧する | ロールフォワード |
試験では、次の3つを見つけます。
複数サイト
全参加者へ確認
全員可なら確定
この3つがそろえば、2相コミットを疑います。
調停者と参加者を読み分ける
問い合わせる側
→ 調停者
可否を回答する側
→ 参加者
調停者は、全参加者から「可」を受け取ったときだけコミットを指示します。
第1相と第2相を読み分ける
第1相
→ コミット可能か確認する
第2相
→ コミットまたはロールバックを指示する
「確認」と「確定」を混同しないことがポイントです。
どんな場面で使う?
2相コミットは、1つのトランザクションが複数のデータベースやサイトにまたがる場合に使います。
例えば、次のような処理です。
拠点Aの在庫を減らす
+
拠点Bの配送情報を登録する
+
本部の売上を記録する
一部だけ成功すると不整合が起こるため、全体の結果をそろえる必要があります。
ただし、複数サイトとの通信や応答待ちが必要になるため、単一サイトの通常のコミットより処理は複雑になります。
よくある誤解・混同
2相コミットと排他制御
| 用語 | 目的 |
|---|---|
| 2相コミット | 複数サイトの更新結果をそろえる |
| 排他制御 | 同じデータへの同時アクセスを制御する |
全員の合意を取る
→ 2相コミット
他の処理を待たせる
→ 排他制御
2相コミットとロールバック
ロールバックは、処理を取り消して開始前の状態へ戻す操作です。
2相コミットでは、1つでも「不可」があればロールバックを指示しますが、2相コミットそのものは全参加者へ確認して、全体の最終結果を決める方式です。
更新前ログで元に戻す
→ ロールバック
複数サイトへ可否を確認する
→ 2相コミット
2相コミットとロールフォワード
ロールフォワードは、更新後ログを使って、バックアップ取得後の更新を再実行する復旧方法です。
| 用語 | 向き |
|---|---|
| ロールバック | 更新を取り消して戻す |
| ロールフォワード | ログで更新を進めて復旧する |
| 2相コミット | 複数サイトの確定・中止をそろえる |
2相コミットと通常のコミット
通常のコミット
→ 1つのトランザクション結果を確定する
2相コミット
→ 複数サイトの合意を確認して全体を確定する
「コミット」という名前だけで判断せず、複数サイトと可否確認があるかを見ます。
まとめ(試験直前用)
- 2相コミットは、分散DBで複数サイトの更新結果をそろえる方式
- 第1相でコミット可能か確認する
- 第2相でコミットまたはロールバックを指示する
- 全参加者が可ならコミット、1つでも不可ならロールバック
- 同時アクセスの制御は排他制御
- 更新取消しはロールバック、ログによる再実行はロールフォワード