データベース

【応用情報】ロールバックなどデータベースの障害対応について解説

お茶ん太
お茶ん太

この記事では、コミットとロールバック・ロールフォワード・チェックポイントを使ったロールフォワード・ロールバックについて、初心者にも分かりやすく図解付きで丁寧に解説しています!

コミットとロールバック

  • トランザクション処理が正常に終了した時は、データベースに処理結果を反映させるコミットを行う
  • トランザクション処理が途中で異常終了した時は、処理直前の状態に戻すために、更新前情報を用いたロールバックを行う

ロールフォワード

  • トランザクション処理とか関係なく、データベースに障害が発生した時は、定期的に取得しているバックアップからデータを復元して、バックアップ取得後に行われたトランザクション処理の結果の回復については更新後情報を用いたロールフォワードを行う

チェックポイント

  • トランザクション処理の結果を主記憶装置にコミットしておき、その後、まとめてデータベースに結果を更新するイベントをチェックポイントと呼ぶ
  • チェックポイント前にコミットした内容は、チェックポイント時にデータベースへ内容が反映されているので回復処理が不要
  • チェックポイント後にコミットした内容は、データベースへの反映がまだなので、ロールフォワードによる回復処理が必要

トランザクション処理

トランザクション処理とは、データベースに対してまとめて行う必要がある操作を一括りにした処理のことです。トランザクション処理は全てを完全に行うか、全く行わないかのどちらかです。

トランザクション処理の例は銀行の振込処理です。
振込処理は以下の4つの処理から成り立ち、中断することは許されません。

  1. Aさん(送金する人)の口座残高を確認する
  2. Aさんの口座から残高を減らす
  3. Bさん(入金される人)の口座残高を確認する
  4. Bさんの口座残高から残高を増やす

トランザクション処理が途中で終了した場合を考えてみましょう。例えば、送金口座から残高を減らした後にシステム障害が起きて、入金口座の残高を増やす処理が行われなかったとします。Aさんの送金口座からお金は減ったのに、Bさんの入金口座の残高が増えないことになり、凄く困ったことになりますよね。

なので、処理を行う時は4つ全て行う必要があり、途中で失敗した時は一番最初の状態に戻す必要があります。このように、一連で行う必要がある操作の一括りをトランザクション処理と言います。

バックアップとログファイル

バックアップ

バックアップとは、データベースに記録されたデータをコピーして別の場所に保管することです。バックアップのおかげで、データベース障害でデータが破損した時も、データの復元が可能になります。

ログファイル

トランザクション処理でデータベースを更新するときは、更新前と更新後の情報を記録しておきます。更新前後の情報を残すことで障害が発生した時にデータベースの復旧が可能になるんですね。更新前後の情報を記録したファイルをログファイルと呼びます。

コミットとロールバック

トランザクション処理が成功したときは変更を確定する処理を行い、それをコミットと呼びます。一方、トランザクション処理が途中で失敗したときは、データベースの状態をトランザクション処理を実行する前に戻す操作を行い、それをロールバックと呼びます。ロールバックのときは更新前情報を使います。

ロールフォワード

ロールフォワードは、データベースに物理的な障害が発生した際に、直前のバックアップとログの更新後情報からデータを復旧させる方法です。

データベースに物理的な障害が発生した場合は新しいデータベースを用意してデータを復旧する必要があります。新しいデータベースには、直近のバックアップデータを適用し、その後のトランザクションの更新後ログを順番に適用していくことで、物理的な障害が発生する前の状態に戻します。

チェックポイント

DBMSには処理結果をすぐデータベースに更新せず、いったん主記憶装置に記録した後にまとめてデータベースに更新するものがあります。なぜなら主記憶装置に更新する方が速いからです。

いったん主記憶装置に記憶した情報は、一定間隔でデータベースに反映させます。この反映のことをチェックポイントと言います。

チェックポイントを使うシステムで、トランザクション処理中に障害が発生した場合の復旧方法を見てみましょう。

  • トランザクション処理①:
    データベースに反映しているので復旧の必要はありません
  • トランザクション処理②:
    主記憶装置にコミットはしたが、データベースに反映する前に障害が発生したので、チェックポイントからロールフォワードが必要です
  • トランザクション処理③:
    トランザクション中に障害が発生したので、ロールバックでトランザクション前の状態に戻す必要があります

応用情報技術者試験での出題例

令和6年度春期問27

応用情報技術者
午前試験 令和6年度春期問27

トランザクションTはチェックポイント後にコミットしたが,その後にシステム障害が発生した。トランザクションTの更新内容をその終了直後の状態にするために用いられる復旧技法はどれか。ここで,トランザクションはWALプロトコルに従い,チェックポイントの他に,トランザクションログを利用する。

ア 2相ロック
ウ ロールバック

イ シャドウページ
エ ロールフォワード

正解と解説

正解は”エ”

問題文の状況を図にすると、このようになります。

トランザクションTは正常に終了して、主記憶装置にコミットされていますが、DBサーバに更新されていないため、更新後情報を使って復旧する必要があります。これをロールフォワードと言うので、答えはエです。

令和5年度秋期問30

応用情報技術者
午前試験 令和5年度秋期問30

DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。

正解と解説

正解は”ア”

T1はコミット後にチェックポイントがあるのでDBサーバに処理内容が反映されています。
よって、復旧は必要ありません。

T2とT5はチェックポイント後にコミットされているので、DBサーバへ処理内容が反映されていません。よって、ロールフォワードの対象です。

T3とT4はデータベースを更新しない処理のため、復旧する必要はありません。

T6はトランザクション中に障害が発生したので、ロールバックの対象です。

令和4年度秋期問29

応用情報技術者
午前試験 令和4年度秋期問29

チェックポイントを取得するDBMSにおいて,図のような時間経過でシステム障害が発生した。前進復帰(ロールフォワード)によって障害回復できるトランザクションだけを全て挙げたものはどれか。

正解と解説

正解は”ウ”

ロールフォワードで復旧するトランザクションは、
コミット済みで更新後情報があり、DBサーバに反映されていないもの(チェックポイント後にコミット)が対象です。よって、答えはT4とT5のウになります。

令和4年度春期問29

応用情報技術者
午前試験 令和4年度春期問29

undo/redo方式を用いた障害回復におけるログ情報の要否として,適切な組合せはどれか。

正解と解説

正解は”ア”

undoは「更新の取り消し」、redoは「undoで取り消した更新を再度行う」ことです。
Excelで言うと、左の矢印がundoで、右の矢印がredoです。

なので、undoは更新前情報が、redoは更新後情報が必要になります。

令和3年度秋期問27

応用情報技術者
午前試験 令和3年度秋期問27

データベースの障害回復処理に関する記述として,適切なものはどれか。

ア 異なるトランザクション処理プログラムが,同一データベースを同時更新することによって生じる論理的な矛盾を防ぐために,データのブロック化が必要となる。

イ システムが媒体障害以外のハードウェア障害によって停止した場合,チェックポイントの取得以前に終了したトランザクションについての回復作業は不要である。

ウ データベースの媒体障害に対して,バックアップファイルをリストアした後,ログファイルの更新前情報を使用してデータの回復処理を行う。

エ トランザクション処理プログラムがデータベースの更新中に異常終了した場合には,ログファイルの更新後情報を使用してデータの回復処理を行う。

正解と解説

正解は”イ”

ア 同時更新による矛盾を防ぐためにするのはトランザクション処理の排他制御なので誤りです。

イ 媒体とは情報を記録する装置のことです。なので、ここで言う媒体障害とはDBサーバの障害のことですね。DBサーバ以外で障害が発生しているので、チェックポイントでDBサーバに反映した情報は無事だと考えることが出来ます。よって、チェックポイント以前に終了したトランザクション処理は回復処理が不要なので正解です。

ウ 媒体障害、つまり、DBサーバに障害が発生した時、バックアップを復元した後、バックアップ後のトランザクション処理の更新情報を用いて回復処理を行います。よって誤りです。

エ トランザクション処理が異常終了した場合は、トランザクション処理の更新情報を用いて処理直前の状態に戻します。よって誤りです。