基本情報技術者 2010年 秋期 午前(科目A) 問56
問題文
データベースのロールバック処理の説明はどれか。
選択肢
ア:更新後ジャーナルを用いて、トランザクション開始後の障害直前の状態にまでデータを復旧させる。
イ:更新後ジャーナルを用いて、トランザクション開始直前の状態にまでデータを復旧させる。
ウ:更新前ジャーナルを用いて、トランザクション開始後の障害直前の状態にまでデータを復旧させる。
エ:更新前ジャーナルを用いて、トランザクション開始直前の状態にまでデータを復旧させる。(正解)
データベースのロールバック処理の説明はどれか。【午前2 解説】
要点まとめ
- 結論:ロールバックは更新前ジャーナル(undoログ)を使い、トランザクションを中止する際に開始直前の状態まで書き戻す処理です。
- 根拠:更新前ジャーナルには変更前の値が記録され、これを用いて途中の更新を取り消すことでデータの一貫性を回復できます。
- 差がつくポイント:更新後ジャーナルはコミット後の再適用(redo)用、更新前ジャーナルは取り消し(undo)用と役割が明確に分かれる点を押さえてください。
正解の理由
正解は エ です。ロールバック(トランザクションの取り消し)は、トランザクションが行った変更を打ち消すために「更新前ジャーナル(old value, undoログ)」を使って、トランザクション開始直前の状態に戻します。更新前ジャーナルには変更前の値が保存されているため、それをデータベースに書き戻すことで未完了の変更を取り消し、一貫性を保ちます。一方、更新後ジャーナル(redoログ)は障害後にコミット済みの変更を再適用するためのものであり、ロールバックの用途とは異なります。
よくある誤解
- 「ロールバックは障害直前の状態に戻す」と考える誤解:障害からの復旧(リカバリ)では障害直前のコミット済み変更を反映するためredoが用いられ、これとロールバック(トランザクション開始直前への復帰)は目的が異なります。
- 「更新後ジャーナルを使って取り消す」と思い込む誤解:更新後ジャーナルは変更後の情報(redo)であり、取り消しには使えません。
- 「ロールバックは必ず自動実行される」との誤解:ユーザ操作や障害時の回復処理によって実行されますが、コミット済み変更は通常ロールバックできません。
解法ステップ
- 選択肢の「更新前」「更新後」をチェックしてundo/redoのどちらかを判別する。
- 「トランザクション開始直前」か「障害直前」かを確認して処理目的(取り消しか再適用か)を判断する。
- 取り消し(rollback)なら更新前ジャーナル+開始直前を満たす選択肢を選ぶ。
選択肢別の誤答解説
- ア: 更新後ジャーナルを使うとあるが、更新後ジャーナルはredo用であり、取り消しには使えません。よって誤りです。
- イ: 更新後ジャーナルかつ開始直前としていますが、更新後ジャーナルは変更後の値であり、開始直前に戻すundoには不適切です。誤りです。
- ウ: 更新前ジャーナルを使う点は正しい方向ですが「トランザクション開始後の障害直前の状態にまで復旧」としており、これはトランザクション内の途中状態に戻す意味になり混同を生じます。ロールバックは開始直前へ戻すのが本来です。よって誤りです。
- エ: 更新前ジャーナル(undoログ)を用い、トランザクション開始直前の状態へ戻す、という説明がロールバックの定義と一致するため正解です。
補足コラム
- 実務ではARIESのような復旧アルゴリズムで「undo(更新前イメージ)とredo(更新後イメージ)」を組み合わせて障害時の整合性を確保します。
- ROLLBACKコマンドはトランザクション内の未コミット変更を取り消しますが、コミット済みの変更は通常ユーザ側で取り消せません(別トランザクションでの逆操作が必要)。
- MVCC(多版本同時実行制御)では旧バージョンを参照して「見かけ上のロールバック」を実現する場合もありますが、基本概念はundoと同等です。
FAQ
Q1: ロールバックとリカバリ(回復)は同じですか?
A1: いいえ。ロールバックはトランザクション単位で開始直前に戻す操作、リカバリは障害後にコミット済み更新の再適用や未コミットの巻き戻しを行う広い概念です。
A1: いいえ。ロールバックはトランザクション単位で開始直前に戻す操作、リカバリは障害後にコミット済み更新の再適用や未コミットの巻き戻しを行う広い概念です。
Q2: 更新前ジャーナルと更新後ジャーナルは具体的に何を保持しますか?
A2: 更新前ジャーナルは変更前の値(old value、undo情報)、更新後ジャーナルは変更後の値(new value、redo情報)を保持します。
A2: 更新前ジャーナルは変更前の値(old value、undo情報)、更新後ジャーナルは変更後の値(new value、redo情報)を保持します。
Q3: コミット済みトランザクションをロールバックできますか?
A3: 通常のロールバックではできません。コミット済みの変更を取り消すには新たなトランザクションで逆の更新を行う必要があります。
A3: 通常のロールバックではできません。コミット済みの変更を取り消すには新たなトランザクションで逆の更新を行う必要があります。
Q4: Write-Ahead Logging(WAL)とは何ですか?
A4: WALはログ(undo/redo)を先にディスクに書く方式で、障害時の正しいリカバリを保証する重要な仕組みです。
A4: WALはログ(undo/redo)を先にディスクに書く方式で、障害時の正しいリカバリを保証する重要な仕組みです。
関連キーワード: ロールバック、更新前ジャーナル、更新後ジャーナル、UNDOログ、REDOログ、WAL、トランザクション、コミット、リカバリ、チェックポイント、ARIES、MVCC、データベース整合性

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

