応用情報22年秋 午前 問30

【中分類】
データベース−5. データベース応用−(2)分散データベース

【問題を解く前に】
問題文を見てみましょう。聞いていることは結局、
「更新処理を確定する方式」です。更新処理を確定するのは、コミットですが、
コミットに関することは、(ア)しかないので、答えは、(ア)・・・なんですが、じゃあ、その前についている、なが〜い文はなにか・・・

 これ、二相コミットの具体的な説明です。

 二相コミットは、分散データベースにおける、コミット処理です。
 1つのデータベースなら、そのデータベースがコミット処理すればいいです。

 でも、コミットしようとするデータが、複数データベースにまたがっている場合、全部をコミットするか、ロールバックしないと一貫性が保てなくなります。

 だから、1つのDBをコミットしたら、次のDBへ・・・という方法はだめです。
  AというDBを更新した・・・
  BというDBを更新しに行こうとしたら、BのDBの電気が切れてた。
  やば、AのDBの更新取り消そう
  と思ったら、AのDBの電源が切れていた・・・

 どうしよう・・・Aは更新したけど、Bは、更新してないよう・・・となってしまいます。

 そこで、分散データベースでは、

<<第一段階 1相=フェーズ1>>
・まず一度、トランザクション処理に関する各データベースに対して、
   こういう更新処理をしますけど、いっすか?と問い合わせます
       ↓
・OKという返事を各DBがします。このとき、各DBは、ロックとかは
 必要ならするけど、この時点では、コミットでもロールバックでもOK
 な状態にしておきます(セキュアっていいます)

<<第二段階 2相=フェーズ2>>
・全員OKなら、コミット指示、だめな人がいたり、なんか他に問題が
 あるときは、ロールバック指示を全DBに送ります
       ↓
・指示に基づき、コミット、またはロールバックします。

っていう処理を行います。

【解き方】

ってことで、知っていたら、すぐに答えが出ます。

【答え】

(ア)

【解き終わって】

知っていれば終わりという問題。