目次
はじめに
今回も、応用情報技術者試験の過去問を解いていきます。
今回の問題は データベースのトランザクション回復処理に関する問題です。
特に WAL(Write Ahead Logging)と障害回復の仕組みを理解しているかどうかが問われています。
データベースの障害復旧は実務でも非常に重要なテーマなので、試験対策だけでなく実務理解の観点からも押さえておきたいポイントです。
問題
トランザクションTはチェックポイント後にコミットしたが、その後にシステム障害が発生した。
トランザクションTの更新内容をその終了直後の状態にするために用いられる復旧技法はどれか。
ここで、トランザクションは WALプロトコルに従い、チェックポイントの他にトランザクションログを利用する。
選択肢
| 選択肢 | 内容 |
|---|---|
| ア | 2相ロック |
| イ | シャドウページ |
| ウ | ロールバック |
| エ | ロールフォワード |
解答
エ:ロールフォワード
解説
この問題のポイントは次の3点です。
- トランザクションは コミット済み
- チェックポイント後
- システム障害が発生
つまり
コミット済みトランザクションの更新を 再適用する処理
が必要になります。
その処理が ロールフォワード(roll forward)です。
障害発生時の処理の流れ
システム障害発生までの流れを改めて示すと、下記の通りです。
① チェックポイント
↓
② トランザクション更新
↓
③ COMMIT
↓
④ システム障害
この場合、ディスクへの書き込みがまだ完了していない可能性があります。
そこでログを使って処理を復元します。
ログを確認
↓
コミット済み → ロールフォワード
未コミット → ロールバック
イメージ図
時間軸
------------------------------------------------
チェックポイント → 更新 → COMMIT → 障害発生
↑
この更新を再適用
(ロールフォワード)
つまり
「コミット済みの処理を再実行する」
のがロールフォワードです。
各選択肢の意味
| 用語 | 内容 |
|---|---|
| 2相ロック | 同時実行制御の仕組み |
| シャドウページ | 別ページに更新を書き込む方式 |
| ロールバック | 未コミット処理を取り消す |
| ロールフォワード | ログを使い更新を再実行 |
問題の用語解説
WAL(Write Ahead Logging)
データベースの更新では
データを書き込む前にログを書き込む
というルールがあります。
① ログに書く
② データを書き込む
これにより、障害が起きてもログから復元できます。
チェックポイント
ログを途中で区切る仕組みです。
これにより
- 復旧時間を短縮
- 不要ログを無視できる
というメリットがあります。
ログ
--------------------------------------
古いログ | チェックポイント | 新しいログ
復旧は チェックポイント以降だけ確認します。
ロールバック
未完了トランザクションを取り消します。
例
更新
↓
障害
↓
COMMITなし
↓
ロールバック
ロールフォワード
コミット済み処理を再適用します。
例
更新
↓
COMMIT
↓
障害
↓
ロールフォワード
体系的位置づけ
この問題は データベース分野のトランザクション管理に属します。
データベース
├ トランザクション管理
│ ├ ACID特性
│ ├ 同時実行制御
│ │ └ 2相ロック
│ └ 障害回復
│ ├ WAL
│ ├ ロールバック
│ └ ロールフォワード
└ データ管理
応用情報では
- WAL
- チェックポイント
- ロールバック
- ロールフォワード
は頻出テーマです。
今回の問題の重要ポイント
試験で重要なのは次の判断です。
| 状況 | 処理 |
|---|---|
| 未コミット | ロールバック |
| コミット済み | ロールフォワード |
今回の問題は
「コミットした」
と書いてあるので
コミット済み
↓
ロールフォワード
と判断できます。
まとめ
今回の問題のポイントをまとめます。
- WALは ログ先書き方式
- チェックポイントで復旧範囲を限定
- コミット済み → ロールフォワード
- 未コミット → ロールバック

コメント