システム監査技術者 2022年 午前2 問21
問題文
データベースのデータを更新するトランザクションが、実行途中で異常終了したとき、更新中のデータに対して行われる処理はどれか。
選択肢
ア:異常終了時点までのトランザクションの更新ログ情報を破棄することによって、データをトランザクション開始前の状態に回復する。
イ:チェックポイント時点からコミットが完了しているトランザクションの更新ログ情報を使ってロールフォワードすることによって、データを回復する。
ウ:トランザクションの更新ログ情報を使い異常終了時点までロールフォワードすることによって、データを回復する。
エ:トランザクションの更新ログ情報を使いロールバックすることによって、データをトランザクション開始前の状態に回復する。(正解)
🔒 解説は解答すると表示されます
トランザクション異常終了時の回復【午前2解説】
正解の理由
トランザクションが実行途中で異常終了した場合、そのトランザクションはコミットされていません。そのため、途中まで行われた更新を取り消し、データをトランザクション開始前の状態に戻します。
この処理をロールバックといいます。更新ログを利用して変更前の値を復元するエが適切です。
解法ステップ
- 異常終了したのが「実行途中のトランザクション」であることを確認します。
- 実行途中で終了したトランザクションは、コミットが完了していないと判断します。
- コミット前の更新は取り消す必要があるため、ロールバックを選びます。
- ログを使ってトランザクション開始前の状態に戻すエが正解です。
選択肢別の誤答解説
- ア:誤りです。 更新ログを破棄するだけでは、変更されたデータを元の値に戻せません。データを回復するには、ログを使って更新を取り消す必要があります。
- イ:誤りです。 コミット済みのトランザクションの更新を再適用するロールフォワードの説明です。実行途中で異常終了したトランザクションの更新を取り消す処理とは異なります。
- ウ:誤りです。 異常終了時点まで更新を反映するロールフォワードの説明です。未コミットの更新まで反映してしまうため、トランザクションを開始前の状態に戻せません。
- エ:正解です。 更新ログを使って未コミットの更新を取り消し、トランザクション開始前の状態に戻します。
よくある誤解
- ロールバックとロールフォワードを逆に覚えること
ロールバックは更新を取り消し、ロールフォワードは更新を再適用します。 - 異常終了したら、すべての更新を再適用すると考えること
再適用の対象は、一般にコミット済みのトランザクションです。未コミットの更新は取り消します。 - ログを捨てれば元に戻ると考えること
ログは変更前の状態を復元するための情報です。ログを破棄するだけではデータは元に戻りません。
補足コラム
障害回復では、ログを使ってトランザクションごとに処理を分けます。コミット済みなのにデータへの反映が完了していない更新は、ロールフォワードで再適用します。一方、コミット前に異常終了したトランザクションの更新は、ロールバックで取り消します。
FAQ
Q. ロールバックでは、なぜトランザクション開始前の状態に戻せるのですか?
A. 更新ログに記録された変更前の値などを使って、実行済みの更新を取り消すためです。
A. 更新ログに記録された変更前の値などを使って、実行済みの更新を取り消すためです。
Q. ロールフォワードは、どのようなときに使いますか?
A. コミット済みの更新がデータに反映される前に障害が起きた場合などに、ログを使って更新を再適用します。
A. コミット済みの更新がデータに反映される前に障害が起きた場合などに、ログを使って更新を再適用します。
関連キーワード: トランザクション、ロールバック、ロールフォワード、更新ログ、コミット、障害回復

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

