ロールバック処理で復元に使う記録の見分け方
基本情報技術者試験 平成29年度秋期 午前 問30 / データベース › トランザクション処理
過去問にチャレンジ
トランザクション処理プログラムが,データベース更新の途中で異常終了した場合,ロールバック処理によってデータベースを復元する。このとき使用する情報はどれか。
- ア
最新のスナップショット情報
- イ
最新のバックアップファイル情報
- ウ
ログファイルの更新後情報
- エ
ログファイルの更新前情報
会話形式の解説
講師更新の途中で異常終了したときは、まず何を取り消す必要があるか考えます。変更した値を元に戻すには、どの時点の値が必要でしょうか。
受験者変更前の値です。ただ、「最新のスナップショット情報」なら復元できそうにも思えます。
講師その記録が最新でも、取り消したい各更新の直前の値を示すとは限りません。個々の変更を元に戻す情報としては適しません。
受験者では、最新のバックアップファイル情報も、今回の更新が始まる直前の値とは限らないのですね。
講師そのとおりです。ここでは「最新」かどうかより、取り消す更新の前の値が分かるかを確かめます。
受験者ログファイルの更新後情報はどうでしょうか。ログなら更新の内容を追えそうです。
講師更新後情報は、更新によって得られた値です。更新を再適用するロールフォワードには使えますが、元の値に戻す用途には合いません。
受験者取り消すなら、ログファイルに残った更新前情報を使うのですね。
講師はい。更新前情報にある変更前の値を使えば、異常終了したトランザクションによる更新を取り消せます。正解はエです。
受験者「更新の途中で異常終了」が手掛かりで、元に戻すために更新前の値を選ぶ、と整理できました。
講師ログの選択肢で迷ったら、値が更新の前と後のどちらを表すか確認してください。取り消すのか、再適用するのかで使う情報が変わります。
まとめ
更新途中で異常終了したトランザクションの変更は、ロールバックで取り消します。元の値に戻すには、ログファイルの更新前情報を使います。スナップショットやバックアップが最新でも、取り消す更新の直前の値を示すとは限りません。更新後情報は、更新を再適用するロールフォワードに使います。
解答・解説
正解はエです
この問題のテーマ
トランザクションが更新途中で異常終了したとき、変更を取り消すために使う情報を問う問題です。
解き方の考え方
ロールバックでは、完了していないトランザクションの更新を取り消します。更新した値を元に戻すには、更新後の値ではなく、ログに残された更新前の値が必要です。
選択肢ごとの解説
- ×ア 最新のスナップショット情報最新のスナップショットでも、異常終了したトランザクションの各更新の直前を記録しているとは限りません。その変更を個別に取り消すための情報としては適しません。
- ×イ 最新のバックアップファイル情報最新のバックアップファイルも、今回の更新が始まる直前の値を示すとは限りません。未完了の更新を取り消す根拠にはできません。
- ×ウ ログファイルの更新後情報ログファイルの更新後情報は、更新によって得られた値です。これは更新を再適用するロールフォワードに使う情報であり、元の値に戻す用途には合いません。
- ○エ ログファイルの更新前情報ログファイルの更新前情報には、変更される前の値が残っています。その値を使えば、異常終了したトランザクションによる更新を取り消せます。
POINT
- 「更新の途中で異常終了」は、未完了の変更をどう扱うかを考える手掛かりです。
- 「最新」と書かれていても、その記録が更新直前の値を示すとは判断できません。
- ログの情報を選ぶときは、記録された値が更新の前と後のどちらかを確認します。
