平成24年度 春期 午前Ⅱ 問17
トランザクション処理
WALに関する問題
更新前レコードと更新後レコードをログとして利用する DBMS において,ログを先に書き出す WAL(Write Ahead Log)プロトコルに従うとして,処理①~⑥を正しい順番に並べたものはどれか。
① begin transaction レコードを書き出す。
② データベースを更新する。
③ ログに更新前レコードを書き出す。
④ ログに更新後レコードを書き出す。
⑤ commit レコードを書き出す。
⑥ end transaction レコードを書き出す。
- ア①→②→③→④→⑤→⑥
- イ①→③→②→④→⑥→⑤
- ウ①→③→②→⑤→④→⑥
- エ①→③→④→②→⑤→⑥
答えと解説を見る
✓ これが正解エ①→③→④→②→⑤→⑥
解説
ログを先に書き、次にデータベース更新、最後に commit と end です。
WAL プロトコルは、データベースを更新する前に、その更新に対応するログを先に書き出すという規則です。こうしておけば、更新の途中で障害が起きても、ログを使って元に戻すことも、やり直すこともできます。処理の順に並べると、まず①begin transaction レコードを書き、③更新前レコードと④更新後レコードをログに書き出してから、②データベースを更新します。その後、⑤commit レコードを書いてトランザクションを確定させ、最後に⑥end transaction レコードを書きます。ログが先でデータベースが後、確定の commit が終了の end より先、という二つの順序を守っている並びを探すと選べます。
ほかの選択肢はなぜ違うのか
- ア①→②→③→④→⑤→⑥:②のデータベース更新を、③④のログの書き出しより先に行っています。ログを書く前に障害が起きると、元の値が分からなくなるので、ログを先に書く WAL の規則に反します。
- イ①→③→②→④→⑥→⑤:④の更新後レコードを②のデータベース更新より後に書いており、ログを先に書く規則に反します。さらに⑥end transaction を⑤commit より先に書いていて、確定の前に終了を記録しています。
- ウ①→③→②→⑤→④→⑥:⑤commit を④の更新後レコードより先に書いており、しかも④は②の更新より後です。commit の時点で更新後の値がログに無いと、障害の後でその更新をやり直せません。
この問題の用語
- ログいつ誰が何をしたかを、機器やソフトウェアが自動で残していく記録です。あとから出来事をたどれるので、事故の調査や不正の発見に使われます。
- DBMSデータベースを管理するソフト。複数の処理が同じデータを同時に更新しても矛盾しないよう、排他制御などを行います。
- プロトコル通信するときの、決まりごとや手順のまとまりのことをいいます。送る側と受ける側が同じものに従うことで、やり取りが成り立ちます。
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
出典:平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(DBMS)
- 令和6年度 秋期 午前Ⅱ 問14:多版同時実行制御に関する問題(プロトコル)
- 令和5年度 秋期 午前Ⅱ 問19:DRDoSに関する問題(ログ)
- 令和5年度 秋期 午前Ⅱ 問2(プロトコル)
- 令和2年度 10月 午前Ⅱ 問23:フェールオーバ処理の順序(ログ)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)