平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17
テクノロジ/データベース更新前レコードと更新後レコードをログとして利用するDBMSにおいて,ログを先に書き出すWAL(Write Ahead Log)プロトコルに従うとして,処理①~⑥を正しい順番に並べたものはどれか。 ① begin transactionレコードを書き出す。 ② データベースを更新する。 ③ ログに更新前レコードを書き出す。 ④ ログに更新後レコードを書き出す。 ⑤ commitレコードを書き出す。 ⑥ end transactionレコードを書き出す。
出典:平成24年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17
- ア①→②→③→④→⑤→⑥
- イ①→③→②→④→⑥→⑤
- ウ①→③→②→⑤→④→⑥
- エ①→③→④→②→⑤→⑥
正解:エ
解説
WAL(Write Ahead Log)プロトコルは,データベース本体を更新する前に,必ずその更新に関するログ(更新前情報・更新後情報)を先に書き出しておくという規約である。したがって,処理の順序は,まずトランザクションの開始を記録する begin transaction レコード(①)を書き出し,続いて更新前レコード(③)と更新後レコード(④)をログに書き出した上で,実際にデータベースを更新する処理(②)を行い,最後にcommitレコード(⑤)とend transactionレコード(⑥)を書き出す,という流れになる。ログの書出し(③④)がデータベースの実更新(②)よりも先に行われている点がWALプロトコルの要点である。
選択肢ごとの解説
- ア誤り。この順序では,データベースを更新する処理(②)がログへの書出し(③④)よりも先に行われており,ログを先に書き出すというWALプロトコルの原則に反する。
- イ誤り。この順序でも,データベースの更新(②)がログへの更新後レコードの書出し(④)よりも先に行われており,更新後情報をデータベース更新前にログへ書き出すというWALプロトコルの原則に反する。
- ウ誤り。この順序では,commitレコードの書出し(⑤)が更新後レコードの書出し(④)よりも前に行われており,トランザクションが確定(コミット)したとみなされる前に,その更新内容がログに記録し終えているべきであるという原則に反する。
- エ正しい。begin transaction(①)の後,更新前レコード(③)と更新後レコード(④)をログに書き出してからデータベースを更新(②)し,その後commit(⑤),end transaction(⑥)と続くこの順序は,ログをデータベースの実更新より先に書き出すというWALプロトコルの原則に合致する。