更新前情報と更新後情報をログとして利用するDBMSのWALプロトコル【午前2 解説】
要点まとめ
- 結論:WALプロトコルでは、ログに更新前・更新後の情報を書き出してからデータベースを更新し、最後にコミット処理を行う。
- 根拠:WALは障害時のリカバリを確実にするため、データ更新前にログを先行書き込みし、更新の整合性を保つ。
- 差がつくポイント:ログの書き出し順序とデータ更新のタイミング、コミットとトランザクション終了の正しい順序を理解することが重要。
正解の理由
WAL(Write Ahead Log)プロトコルは、データベースの更新前に必ずログに更新前・更新後の情報を書き込み、その後にデータベース本体を更新します。これにより、障害発生時にログを参照して正確にリカバリが可能です。
選択肢エは、①トランザクション開始ログ、③更新前ログ、④更新後ログを書き出し、②でデータベースを更新、⑤コミットログ、⑥トランザクション終了ログの順であり、WALの正しい手順を踏んでいます。
よくある誤解
ログの書き出しは更新後のデータベース更新より後でもよいと誤解されがちですが、WALでは必ず先にログを書き出します。コミットログとトランザクション終了ログの順序も混同しやすいポイントです。
解法ステップ
- トランザクション開始を示すbegin transactionレコードを書き出す(①)。
- 更新前のデータをログに書き出す(③)。
- 更新後のデータをログに書き出す(④)。
- 実際にデータベースのデータを更新する(②)。
- コミットを示すcommitレコードを書き出す(⑤)。
- トランザクション終了を示すend transactionレコードを書き出す(⑥)。
選択肢別の誤答解説
- ア: ①→②→③→④→⑤→⑥
→ データベース更新(②)がログ書き出し前に来ており、WALの原則に反する。
- イ: ①→③→②→④→⑥→⑤
→ 更新後ログ(④)がデータ更新後に書かれておらず、コミット(⑤)が最後でなく順序が逆。
- ウ: ①→③→②→⑤→④→⑥
→ コミット(⑤)が更新後ログ(④)より先に書かれており、ログの整合性が保てない。
- エ: ①→③→④→②→⑤→⑥
→ WALの正しい順序でログとデータ更新、コミット処理が行われている。
補足コラム
WALはデータベースの障害復旧に不可欠な技術で、ログ先行書き込みによりクラッシュ後も一貫性のある状態に戻せます。更新前ログはUNDO処理、更新後ログはREDO処理に利用されます。トランザクションの開始・終了ログは管理上の区切りを示します。
FAQ
Q: なぜ更新前ログと更新後ログの両方が必要ですか?
A: 更新前ログは障害時のロールバック(UNDO)に、更新後ログはロールフォワード(REDO)に使われ、データ整合性を保ちます。
Q: コミットログとトランザクション終了ログは何が違いますか?
A: コミットログはトランザクションの確定を示し、終了ログはトランザクションの完全終了を示す管理用の区切りです。
関連キーワード: WAL, Write Ahead Log, トランザクション管理、ログ書き込み順序、データベース障害復旧、更新前ログ、更新後ログ、コミット処理