ホーム > データベーススペシャリスト試験 > 2019年
データベーススペシャリスト試験 2019年 午前2 問15
分散データベースシステムにおいて, 複数のデータベースサイトを更新する場合に用いられる2相コミットの処理手順のうち, 適切なものはどれか。
ア:主サイトが各データベースサイトにコミット準備要求を発行した場合, 各データベースサイトは, 準備ができていない場合だけ応答を返す。
イ:主サイトは, 各データベースサイトにコミットを発行し, コミットが失敗した場合には, 再度コミットを発行する。
ウ:主サイトは, 各データベースサイトのロックに成功した後, コミットを発行し, 各データベースサイトをアンロックする。
エ:主サイトは, コミットが可能であることを各データベースサイトに確認した後, コミットを発行する。(正解)
解説
2相コミットの処理手順と選択肢の解説
2相コミットとは
分散データベースシステムでは、複数のデータベースサイトにまたがるトランザクションの整合性を保つために、**2相コミット(Two-Phase Commit)**という分散トランザクションの合意プロトコルが使われます。
2相コミットは、主に以下の2つのフェーズから構成されます。
-
準備フェーズ (Prepare phase)
主サイト(コーディネーター)が参加サイト(データベースサイト)に「コミットの準備ができているか」の問い合わせを行います。各参加サイトはトランザクションを完了できるか確認し、問題がなければ「準備OK(Yes)」を返し、問題があれば「準備NG(No)」を返します。 -
コミットフェーズ (Commit phase)
全サイトが「準備OK」であれば主サイトは「コミット」を指示し、そうでなければ「ロールバック」を指示します。参加サイトは主サイトの指示に従い、処理を確定または取り消し、ロックを解除します。
選択肢の検討
-
ア: 「主サイトが各データベースサイトにコミット準備要求を発行した場合, 各サイトは準備ができていない場合だけ応答を返す。」
→ 誤り。準備完了かどうかに関わらず、参加サイトは必ず応答を返します。応答がないとタイムアウトとみなされるためです。 -
イ: 「主サイトは各サイトにコミットを発行し失敗した場合に再度コミットを発行する。」
→ 誤り。2相コミットでは、コミットを指示するのは全てのサイトが準備完了と確認できた後です。「コミットの失敗があったら再度コミットを発行」という手順はありません。 -
ウ: 「主サイトは各データベースサイトのロックに成功した後, コミットを発行しロックを解除する。」
→ 不正確。ロックはトランザクションの途中で行われるが、コミット指示は2相コミットの結果に基づき行われます。ロック解除はコミット後に参加サイトが行うもので、主サイトが直接制御するわけではありません。 -
エ: 「主サイトは、コミットが可能であることを各データベースサイトに確認した後、コミットを発行する。」
→ 正解。これがまさに2相コミットのプロトコル通りの流れです。準備確認(フェーズ1)で合意を得た後にコミット(フェーズ2)を行います。
まとめ
2相コミットの正しい処理手順は:
-
準備確認(1相目)
主サイトが各データベースサイトにコミット準備要求を出す。各サイトは「準備OK」か「準備NG」を返す。 -
コミット決定(2相目)
すべてのサイトが「準備OK」であれば、主サイトは「コミット指示」を出す。1箇所でも「NG」があれば「ロールバック指示」を出す。 -
最終処理
各サイトは主サイトの指示に従い、コミットかロールバックを行った後ロックを解除する。
この流れを反映しているのが選択肢エであるため、正しい答えとなります。