システム監査技術者 2011年 午前2 問17
問題文
データベースのデータを更新中のトランザクションが、実行途中で異常終了した際、更新中のデータに対して行われる処理はどれか。
選択肢
ア:更新処理をなかったことにするために、ロールバックしてトランザクション開始前の状態に回復する。(正解)
イ:チェックポイント時点にデータベースを戻し、コミットが完了しているトランザクションの更新をロールフォワードしてデータを回復する。
ウ:トランザクション異常の発生時点までの更新ログ情報を破棄して、開始前の状態に回復する。
エ:トランザクションの更新ログ情報を使って異常終了時点までロールフォワードして回復する。
🔒 解説は解答すると表示されます
トランザクションのロールバック【午前2解説】
正解の理由
トランザクションの実行中に異常終了すると、そのトランザクションはコミットされていないため、更新内容を確定してはいけません。そこで、更新前の状態に戻す「ロールバック」を行います。
したがって、更新処理を取り消し、トランザクション開始前の状態に回復するアが正解です。ロールバックによって、異常終了したトランザクションの処理がデータベースに残らないようにします。
解法ステップ
- 問題文から、異常終了したのは「更新中のトランザクション」だと確認します。
- 更新がコミット済みかどうかを考えます。実行途中の異常終了なので、更新は確定していません。
- 未確定の更新を取り消す処理はロールバックです。
- 開始前の状態に戻す選択肢を選びます。
選択肢別の誤答解説
- ア:正解です。トランザクション開始後の更新を取り消し、開始前の状態に戻します。
- イ:チェックポイントからの回復やコミット済みトランザクションの再適用(ロールフォワード)に関する説明です。実行中で未コミットの更新を取り消す説明ではありません。
- ウ:更新ログを破棄するだけでは、データベース上に反映された更新を元に戻せるとは限りません。ログは、障害回復に必要な情報として利用します。
- エ:ロールフォワードはログを使って更新を再適用する処理です。異常終了した未コミットの更新まで適用すると、確定していない処理が残るおそれがあります。
よくある誤解
- ロールバックとロールフォワードを混同することがあります。ロールバックは更新の取り消し、ロールフォワードは更新の再適用です。
- 異常終了したら、常にデータベース全体を開始前に戻すわけではありません。未コミットのトランザクションを取り消し、コミット済みの更新は必要に応じて保持・再適用します。
- ログを捨てれば更新を取り消せる、とは限りません。ログは、どの更新を取り消すか、または再適用するかを判断するために使います。
補足コラム
障害回復では、一般に次の二つの処理を使い分けます。
- UNDO(取消し):未コミットのトランザクションによる更新を取り消します。
- REDO(再適用):コミット済みでも障害によってデータベースに反映されていない更新を、ログに基づいて再適用します。
問題では、異常終了したトランザクションの更新が未確定なので、UNDOに相当するロールバックが必要です。
FAQ
Q. コミット後に異常が発生した場合も、ロールバックしますか?
A. コミット済みの更新は確定済みです。障害で更新がデータベースに反映されていない場合は、ログを使ってロールフォワードすることがあります。
A. コミット済みの更新は確定済みです。障害で更新がデータベースに反映されていない場合は、ログを使ってロールフォワードすることがあります。
Q. ロールバックでは、何を手掛かりに更新を取り消しますか?
A. 更新ログなどを使い、トランザクションが変更したデータを更新前の状態に戻します。
A. 更新ログなどを使い、トランザクションが変更したデータを更新前の状態に戻します。
関連キーワード: トランザクション、ロールバック、ロールフォワード、UNDO、REDO、更新ログ、チェックポイント

\ せっかくなら /
システム監査技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

