見出し画像

【デスペ5問】WALプロトコル(データベーススペシャリストAMII)


このNoteには、データベーススペシャリスト(デスペ)のAMIIの「WAL(ログ先書き)」についてまとめました。

WALは、トランザクションの早い段階で、操作記録(ログ)をファイルに書き出すことです。

WALによって、ある時点のデータベースのバックアップデータと、ログさえあれば最新の状態まで復旧できます



SQL文を発行すればデータベースの変更が行われると思うかもですが、実際は違います。実際のデータベースでの処理まで知って、復旧作業でなるべく直前の状態にまで復旧できる理由まで理解しましょう。

WALは令和02年以降、出題されていません。頻出問題ではないですが、実際のデータベース処理・復旧作業を理解するために重要な手順です。

このNoteでは、どんなログを記録していたか、データベースの実更新のタイミング、コミット(確定)の具体的な定義などが曖昧だったことに気づく問題演習ができるよう構成しました。


デスペのAMIIはざっくり5年分解けば、全パターンが把握できます。

私が合格した時に、学習ノートにジャンル毎に問題をまとめました。このNoteの解説は、学習ノートと、私のIT専門学校での授業内容を基にしています。

それでは始めましょう!







WALとは「ログ先書き」


WAL(Write Ahead Logging, ログ先書き)プロトコルでは、データベースの操作記録(ログ)のファイルへの書き出しを優先します。

ログの書き出しを、トランザクションのコミット処理やデータベースの更新処理よりも優先します。

なぜなら、元になるデータベースをバックアップから復元し、ログに基づいてデータベース更新処理を実行すれば直前の状態にまで復旧できるからです。

またデータベースの実更新は補助記憶装置にアクセスするため、時間がかかります。よって、しばらくはアクセスの速いバッファ(メモリ)内でデータベースを更新し、あるタイミング(チェックポイント)でまとめて補助記憶のデータベースの実更新を行います。

なお、バッファ(メモリ)は揮発性なので、障害によって電源が落ちるなどすれば消失してしまいます。よって、ログをいち早く不揮発性の補助記憶にファイルとして書き出す必要があるのです。




WALプロトコルの手順と目的


WALはログをいち早く書き出す手順。WALの目的は、データベースをなるべく最新の状態にまで復旧することです。

WALプロトコルに従って、以下の処理1~6を正しい順番に並べたものはどれか。
1:begin transactionレコードを書き出す
2:データベースを更新する
3:ログに更新前レコードを書き出す
4:ログに更新後レコードを書き出す
5:commitレコードを書き出す
6:end transactionレコードを書き出す

ア:1, 2, 3, 4, 5, 6
イ:1, 3, 2, 4, 6, 5
ウ:1, 3, 2, 5, 4, 6
エ:1, 3, 4, 2, 5, 6

データベーススペシャリスト 平成24年午前2問17より改変

正答はエ。

ア~エを見ると、1と6はトランザクションの開始と終了で共通しています。

次に見るべきは、3と4のログ書き出しをなるべく早く行っている選択肢を探すこと。

2のデータベースを更新するよりも、先にログ(記録)の書き出し3, 4を優先すべきです。

なお、補助記憶のデータベース更新は毎回のトランザクションで行いません。更新は時間がかかりますから、チェックポイントでまとめて行います。



WALプロトコルの目的はどれか。

ア:実行中のトランザクションを一時停止させずに、チェックポイント処理をできるようにする
イ:デッドロックしているトランザクションの検出をできるようにする
ウ:DBMSが停止しても、コミット済みのデータベースに書き込まれていない更新データの回復までできるようにする
エ:ログの記録媒体に障害が発生しても、データベースのデータ更新ができるようにする

データベーススペシャリスト 平成25年午前2問18より改変
平成28年午前2問16より改変

正答はウ。

  • ア:WALはトランザクションの手順であり、チェックポイント処理(補助記憶のデータベースの更新作業)とは無関係です。

  • イ:待ちグラフの説明。待ちグラフでは、トランザクションが別のトランザクションがロックしている資源を必要としているかを図示でき、閉路(ループ)ならデッドロックが発生していると分かります。

  • ウ:正しい。更新後ログがあれば、チェックポイント以後のデータベースの処理を進め(ロールフォワード)て、復旧できます。

  • エ:ログがなければ、チェックポイント以後のデータベースの復旧ができません。ログの記録媒体に障害が発生しても大丈夫なのようにするには、記録媒体を複数用意して冗長したり、バックアップを別に保管したりなどが考えられます。




ログファイル・コミット・チェックポイントとの関係


データベースの操作ログには2種類あります。

  • ロールバックのための更新前情報

  • ロールフォワードのための更新後情報

ロールバックは、データベース更新を取り消して元の内容に巻き戻す処理。コミット(確定)しなかった時に行います。

ロールフォワードは、コミットした内容にまでトランザクションを進める処理です。

データベースの実データはチェックポイントでまとめて実施されますが、チェックポイント以後にコミットしたトランザクションの操作は更新後情報によって処理を進めます。


障害復旧作業における、ログファイルの役割の問題です。

DBMSが取得するログについての正しい記述はどれか。

ア:トランザクションの取り消しに備えて、データベースの更新後情報を取得する
イ:障害復旧に備えて、更新前情報を取得する
ウ:ロールバック後のトランザクション再実行に備えて、更新後情報を取得する
エ:ロールフォワードに備えて、更新後情報を取得する

データベーススペシャリスト 平成年27午前2問05より改変
平成年29午前2問06より改変
令和年02午前2問04より改変

正答はエ。

  • ア:トランザクションの取り消しはロールバックであり、更新前情報を参考に行われます。

  • イ:チェックポイント以後にコミットした内容は、更新後情報を参考にロールフォワードで復旧させます。

  • ウ:ロールバックはトランザクションの取り消しなので、再実行はしません。ロールバック処理をして、利用者や管理者から再度同じトランザウションが命令されれば、別トランザウションとして実行します。

  • エ:ロールフォワード更新後情報を参考に行います。



コミットはデータベースへの操作を確定させることです。

コミットしたからには、障害が発生しても状態復元しなければなりません。

データベースでは、システム障害が発生しても、整合性を保ち、最新状態に復旧する必要がある。DBMSがトランザクションのコミット処理完了とみなすタイミングはどれか。

ア:アプリケーションの更新命令の完了時点
イ:チェックポイント処理の完了時点
ウ:ログバッファへのコミット情報書き込みの完了時点
エ:ログファイルへのコミット情報書き出しの完了時点

データベーススペシャリスト 平成24年午前2問14より改変
平成26年午前2問13より改変

正答はエ。

ウのログバッファは、単なるメモリ(揮発性)なので障害でシステムが落ちれば喪失してしまいます。頭で覚えていても、メモしてなければ忘れてしまうリスクがありますよね。

イのチェックポイントは補助記憶のデータベースを実際に更新するタイミングです。障害復旧ではチェックポイントまではすんなり復旧できます。

エのログファイルは、補助記憶(不揮発性)への書き込み。チェックポイントで取得したデータベースを、更新後情報(ログ)を参考に処理を進め(ロールフォワード)れば、復旧できます。



DBMSがチェックポイントレコードをログに書き出す時点で、他に行っている処理はどれか。

ア:完了していないトランザクションのロールバック
イ:更新したいデータの更新前・後情報ログのファイルへの書き出し
ウ:データベース内容のバックアップファイルへの書き出し
エ:バッファに残っている更新後データのデータベースへの書き出し

データベーススペシャリスト 平成年25午前2問16より改変

正答はエ。

チェックポイントは補助記憶のデータベースを実際に更新するタイミングです。

エの「データベースへの書き出し」はチェックポイントで行う実データベースの更新処理です。

実際のデータベースの更新処理は時間がかかるので、バッファ(メモリ)内で更新とログを一旦記録しておいて、チェックポイントでまとめて書き出します。


しかしログ(記録)は最も大事なので、WALに従ってトランザクションのなるべく早い段階で書き出します。

イの「更新前・後情報ログのファイルへの書き出し」は、WALを指しています。




p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。

でわでわ(・ω・▼)ノシ



この記事が参加している募集

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ