この記事ではデータベースの障害対応についてIT初心者にも分かりやすく解説します。
コミットとロールバック
- トランザクション処理が正常に終了した時は、データベースに処理結果を反映させるコミットを行う
- トランザクション処理が途中で異常終了した時は、処理直前の状態に戻すために、更新前情報を用いたロールバックを行う
ロールフォワード
- トランザクション処理とか関係なく、DBサーバに障害が発生した時は、定期的に取得しているバックアップからデータを復元して、バックアップ取得後に行われたトランザクション処理の結果の回復については更新後情報を用いたロールフォワードを行う
チェックポイント
- トランザクション処理の結果を主記憶装置にコミットしておき、その後、まとめてDBサーバに結果を更新するイベントをチェックポイントと呼ぶ
- チェックポイント前にコミットした内容は、チェックポイント時にDBサーバへ内容が反映されているので回復処理が不要
- チェックポイント後にコミットした内容は、DBサーバへの反映がまだなので、ロールフォワードによる回復処理が必要
応用情報ではデータベースの障害対応に関する問題が出題されます。是非最後までご覧ください。
トランザクション処理
トランザクション処理とは、データベースに対してまとめて行う必要がある操作を一括りにした処理のことです。トランザクション処理は全てを完全に行うか、全く行わないかのどちらかです。
トランザクション処理の例は銀行の振込処理です。
振込処理は以下の4つの処理から成り立ち、中断することは許されません。
- Aさん(送金する人)の口座残高を確認する
- Aさんの口座から残高を減らす
- Bさん(入金される人)の口座残高を確認する
- Bさんの口座残高から残高を増やす
トランザクション処理が途中で終了した場合を考えてみましょう。例えば、送金口座から残高を減らした後、システム障害が起きて入金口座の残高を増やす処理が行われなかったとします。Aさん送金口座からお金は減ったのに、Bさんの入金口座の残高が増えないことになり、凄く困ったことになります。
なので、処理を行う時は4つ全て行う必要があり、途中で失敗した時は一番最初の状態に戻す必要があります。このように、一連で行う必要がある操作の一括りをトランザクション処理と言います。
コミットとロールバック
トランザクション処理は全て完了するか、全く行わないかのどちらかでした。
トランザクション処理が全て完了した時は、処理結果をデータベースに反映させる必要があります。これをコミットと言います。
一方、トランザクション処理の途中で問題が発生した時は、途中まで処理が進行していたとしても処理を行う前の状態に戻す必要があります。これをロールバックと言います。
ロールバックは更新前情報を使って、データベースをトランザクション処理直前の状態に戻します。
ロールフォワード
トランザクション処理中に障害が発生した時は、更新前情報を使ったロールバックでデータベースを正常な状態に戻しました。
トランザクション処理中以外で障害が発生した場合は、定期的に取得しているバックアップからデータを復元し、そこからトランザクション処理の内容を反映させていく必要があります。これをロールフォワードと言います。
チェックポイント
DBMSには処理結果をすぐにDBサーバに更新せず、いったん主記憶装置に記録した後にまとめてDBサーバに更新するものがあります。これは主記憶装置に更新する方が速いからです。
いったん主記憶装置に反映されたものは、一定の間隔でDBサーバに反映させます。
この反映のことをチェックポイントと言います。
このシステムに障害が発生した場合、チェックポイントでDBサーバに反映されたもの以外は復旧する必要があります。下の状況を例に復旧するべきトランザクションを整理します。
この場合、こうなります。
- トランザクション処理①:
チェックポイントでDBサーバに反映しているので復旧の必要なし - トランザクション処理②:
主記憶装置にコミットはしたが、DBサーバに反映する前に障害が発生したので、
チェックポイントからロールフォワードが必要 - トランザクション処理③:
トランザクション中に障害が発生したので、ロールバックでトランザクション前の
状態に戻す必要あり
応用情報技術者試験での出題例
令和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サーバに障害が発生した時、バックアップを復元した後、バックアップ後のトランザクション処理の更新後情報を用いて回復処理を行います。よって誤りです。
エ トランザクション処理が異常終了した場合は、トランザクション処理の更新前情報を用いて処理直前の状態に戻します。よって誤りです。