データベーススペシャリスト平成21年春期 午前Ⅱ 問11

問11

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

分類

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

正解

解説

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

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

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

①begin transactionレコードの書出し

③ログに更新前レコードの書出し

④ログに更新後レコードの書出し

②データベースの実更新

⑤commitレコードの書出し

⑥end transactionレコードの書出し
© 2016-2024 データベーススペシャリストドットコム All Rights Reserved.

Pagetop