データベーススペシャリスト 平成24年春期 午前U 問17

午前U 問17

更新前情報と更新後情報をログとして利用するDBMSにおいて,ログを先に書き出すWAL(Write Ahead Log)プロトコルに従うとして,処理①〜⑥を正しい順番に並べたものはどれか。
  1. begin transactionレコードを書き出す。
  2. データベースを更新する。
  3. ログに更新前レコードを書き出す。
  4. ログに更新後レコードを書き出す。
  5. commitレコードを書き出す。
  6. end transactionレコードを書き出す。
  • @→A→B→C→D→E
  • @→B→A→C→E→D
  • @→B→A→D→C→E
  • @→B→C→A→D→E
  • [この問題の出題歴]
  • データベース H16春期 問36
  • データベース H18春期 問37
  • データベース H21春期 問11

分類

テクノロジ系 » データベース » トランザクション処理

正解

解説

WAL(Write Ahead Log)プロトコルは、トランザクションがログを安定記憶に書き出すタイミングについての取り決めで、"Write Ahead Log"(まずログを書け)という意味のとおり、実際の操作に先行してログの即時書き出しを求めるものです。

WALプロトコルの動作は次の2点に要約されます。
  • データベースの更新は、まずそれをログを書き出してから行う(更新前ログ)
  • トランザクションはコミットを行う前に、該当する全てのデータベース更新情報をログを書き出す(更新後ログ)
実際の操作に先だってログを書き出す理由は実操作とログとの同期をとり、トランザクションの原子性と永続性を担保するためです。例えば"更新開始→ログ書出し"の間に障害が発生したとします。本来であれば復帰後にロールバックを行うべきですが、ログが記録されていないためロールバックすべきかが判断ができません。また"コミット→ログ書出し"間の障害のケースでは、コミットが行われたにもかかわらずログが記録されていないことになり、ロールフォワードによる更新内容の反映ができません。これを解消するためにログの先行書出しを行い、障害発生時にはログからロールバック又はロールフォワードを確実に判断できるようにしています。(ログの書出し完了をコミット時点とする)

正常なトランザクションは BEGIN TRANSACTION によって開始され、COMMIT を経て END TRANSACTION で終了しますが、WALプロトコルに従えばトランザクションの開始直後に更新前ログを書出し、COMMIT直前に更新後ログを書き出すことになります。したがって正しい順序は「エ」です。

①begin transactionレコードの書出し
③ログに更新前レコードの書出し
④ログに更新後レコードの書出し
②データベースの実更新
⑤commitレコードの書出し
⑥end transactionレコードの書出し
© 2016-2019 データベーススペシャリストドットコム All Rights Reserved.

Pagetop