データベースの障害復旧入門:基本概念とプロセスをわかりやすく解説
システム開発や運用、あるいは情報処理技術者試験の学習において、データベースの障害復旧は避けては通れない重要な知識領域です。ロールバックやロールフォワード、チェックポイントといった用語は頻出しますが、その仕組みや関連性を正確に理解するのは容易ではありません。この記事では、データベースで発生する障害の種類を整理し、それぞれの復旧プロセスで中心的な役割を果たす基本概念と仕組みを体系的に解説します。
データベースで発生する障害の主な種類
トランザクション障害:単一処理の異常終了
トランザクション障害とは、データベースにおける一連の処理単位(トランザクション)が、正常に完了せず異常終了する事象を指します。この障害はデータベース管理システム(DBMS)自体は稼働を続けており、影響範囲は該当のトランザクションのみに限定されます。しかし、処理が中途半端な状態で停止するとデータの不整合を招くおそれがあるため、処理開始前の状態に戻すロールバックという復旧作業が必要です。
- プログラムの論理的なバグや、データ型の不一致による演算エラー
- 不正なデータ入力や、想定外の数値による桁あふれ
- 複数処理が互いの資源を待ち続けるデッドロックの発生と、システムによる強制終了
システム障害:DBMSやOSのダウン
システム障害とは、データベース管理システム(DBMS)や、それが稼働するオペレーティングシステム(OS)が予期せず停止する事象を指します。この障害が発生すると、コンピュータの主記憶装置(揮発性メモリ)に保持されていたデータはすべて失われます。しかし、ハードディスクなどの補助記憶装置(不揮発性記憶媒体)に書き込まれたデータは保持されているため、システムの再起動後、ログファイルを用いてデータの整合性を回復させることが可能です。
- DBMSやOSに含まれるソフトウェアの致命的な不具合
- メモリ不足によるシステムの動作停止
- CPUやメモリ、電源ユニットなどのハードウェア故障
媒体障害:ディスクなどの物理的な破損
媒体障害とは、データベースの本体データが保存されているハードディスクなどの記録媒体が物理的、あるいは論理的に破損し、データを読み出せなくなる最も深刻な障害を指します。この障害の最大の特徴は、データベースの本体そのものが失われる点にあり、システム障害のように再起動だけでは復旧できません。復旧には、あらかじめ別の場所に保管しておいたバックアップファイルと、その後の更新履歴を記録したログファイルが不可欠となります。
- 記録媒体の経年劣化や物理的な故障
- 機器の落下や衝撃による破損
- 火災、水害、地震などの自然災害による設備の損壊
- 操作ミスによる重要なファイルの削除
データベース障害復旧の基本となる2つの処理
ロールバック(後退復帰)とは?コミット前の処理を取り消す仕組み
ロールバックとは、実行中のトランザクションが異常終了した際に、その処理による変更内容をすべて取り消し、処理開始直前の状態に戻す操作を指します。データベースでは、処理が正常に完了したことを「コミット」と呼びますが、ロールバックはコミットされなかった未完了の処理を対象とします。具体的には、データ変更前の値を記録した更新前ログを利用して、変更箇所を元の値に書き戻します。これにより、処理の途中段階で障害が発生しても、データの原子性(一連の処理がすべて実行されるか、全く実行されないかのいずれかである性質)が保証され、整合性が保たれます。
ロールフォワード(前進復帰)とは?コミット済み処理を再現する仕組み
ロールフォワードとは、媒体障害などによってデータベースが失われた際に、過去のバックアップデータを基点として、その後の更新内容を再現する復旧手法を指します。まず、取得済みのバックアップファイルを新しい記録媒体に復元(リストア)します。次に、バックアップ取得後から障害発生までにコミットされた処理の履歴が記録された更新後ログを、時系列順に適用していきます。これにより、一度失われた正常な更新処理をデータベース上に再構築し、障害発生直前の最新の状態まで復元させることが可能です。ロールバックが「処理の取り消し」であるのに対し、ロールフォワードは「処理の再実行」という前進的な復旧処理と言えます。
障害復旧に不可欠なファイルの役割
ログファイル(ジャーナルファイル)の役割と記録される情報
ログファイル(ジャーナルファイル)は、データベースに加えられたすべての変更履歴を時系列で記録する、障害復旧における最重要ファイルの一つです。通常、データの更新はまずログファイルに記録され、その後にデータベース本体へ反映されるため、万一のシステム停止時にも「何がどこまで行われたか」を正確に追跡できます。このファイルは、障害からの復旧だけでなく、原因究明のための手がかりとしても極めて重要な役割を果たします。
- トランザクションの開始と終了(コミットまたはロールバック)
- データを識別する情報(テーブル名、行IDなど)
- データの更新前と更新後の値
- 操作が実行された日時
- 操作を実行したユーザーやプログラムの情報
更新前ログと更新後ログの違いと用途
ログファイルに記録されるデータ変更履歴は、その目的から「更新前ログ」と「更新後ログ」に大別されます。この2つを適切に使い分けることで、さまざまな障害からの復旧が可能になります。
| 項目 | 更新前ログ (Before Image) | 更新後ログ (After Image) |
|---|---|---|
| 記録内容 | データが変更される前の値 | データが変更された後の値 |
| 主な用途 | ロールバック(処理の取り消し) | ロールフォワード(処理の再現) |
| 対応する復旧処理 | 異常終了した処理をなかったことにする | 正常に完了した処理をデータベースに再反映させる |
バックアップファイルの重要性と取得タイミング
バックアップファイルは、ある特定時点のデータベースの完全な複製(スナップショット)であり、特に媒体障害からの復旧における不可欠な起点となります。このファイルがなければ、データベースをゼロから再構築することは極めて困難です。バックアップは、システムの更新頻度やデータの重要性に応じて、業務への影響が少ない深夜帯などに定期的に取得するのが一般的です。運用効率を高めるため、すべてのデータを保存するフルバックアップと、変更があった部分のみを保存する差分バックアップや増分バックアップを組み合わせて計画的に実行します。
バックアップ取得とリストア訓練の計画(RTO/RPO)
実用的なバックアップ運用計画には、目標復旧時点(RPO)と目標復旧時間(RTO)という2つの重要な指標があります。RPOは「障害発生時に、どの時点のデータまで復旧できればよいか」を示し、バックアップの取得頻度を決定します。一方、RTOは「システムが停止してから、どれくらいの時間で復旧させる必要があるか」を示し、復旧手順や体制を整備する際の目標となります。これらの目標を確実に達成するためには、バックアップを取得するだけでなく、実際にデータを復元するリストア訓練を定期的に行い、手順の有効性や所要時間を確認することが不可欠です。
復旧時間を短縮するチェックポイントの仕組み
チェックポイントの目的とデータベースにおける役割
チェックポイントとは、データベースの性能向上のためにメモリ上で行われたデータ更新内容を、ディスク上のデータベース本体ファイルへ定期的に書き込み、同期させる仕組みを指します。この処理を行うことで、ディスク上のデータが「少なくともチェックポイントの時点までは最新の状態である」ことが保証されます。これにより、万が一システム障害が発生しても、復旧作業を開始すべきログ上の明確な起点が作られ、復旧プロセス全体の効率が大幅に向上します。
チェックポイントが復旧対象のログを限定し高速化する仕組み
チェックポイントの最大のメリットは、障害復旧にかかる時間を大幅に短縮できる点にあります。システム障害からの復旧時、DBMSはログファイルの先頭からすべてを調べる必要はありません。代わりに、最後に成功したチェックポイントの記録を探し出し、そこから後方のログファイルのみを解析対象とします。チェックポイント以前の更新内容は、すでにディスクへ安全に書き込まれていることが保証されているため、再処理が不要になるのです。これにより、復旧時に検証すべきログの範囲が限定され、システムの再稼働までの時間を劇的に短縮できます。
障害の種類に応じた具体的な復旧プロセス
システム障害からの復旧:チェックポイントとログを用いるウォームスタート
システム障害(DBMSやOSのダウン)からの復旧は、ウォームスタートと呼ばれ、再起動後にチェックポイントとログファイルを用いて自動的に実行されます。
- システムを再起動し、DBMSを開始する。
- ログファイルを読み込み、最後に正常完了したチェックポイントを特定する。
- チェックポイント以降のログを解析し、コミット済み(正常完了)のトランザクションをロールフォワードで再実行し、変更をディスクに反映させる。
- 同様に、未コミット(異常終了)のトランザクションをロールバックで取り消し、変更前の状態に戻す。
媒体障害からの復旧:バックアップとログを用いるコールドスタート
媒体障害(ディスクの物理破損など)からの復旧は、コールドスタートと呼ばれ、バックアップを起点とした手動に近い操作が必要となります。
- 破損した記録媒体を新しいものに交換する。
- 最新のバックアップファイルを新しい媒体に書き戻す(リストアする)。
- バックアップ取得以降に記録された更新後ログをすべて適用し、障害発生直前の状態までロールフォワードを実行する。
トランザクション障害からの復旧:ログを用いるロールバック処理
トランザクション障害は、特定の処理のみが失敗するもので、システム全体への影響はありません。そのため、DBMSが障害を検知すると、該当するトランザクションに対して即座にロールバック処理が実行されます。更新前ログを参照し、そのトランザクションが行ったすべての変更を遡って取り消すことで、データの整合性が保たれます。この間、システムは停止せず、他の正常なトランザクションは処理を継続できます。
復旧完了後のデータ整合性確認と業務影響のチェック
データベースの復旧作業が完了しても、プロセスは終わりではありません。データが正しく復元されているかを確認し、業務を安全に再開するための最終チェックが必要です。
- データベースの整合性チェックを行う専用コマンドを実行する。
- 主要なテーブルのレコード件数や、特定のデータが期待通り存在するかを確認する。
- 関係部署へ復旧状況と復旧したデータの時点を正確に報告する。
- 失われたデータ(RPOと障害発生の間のデータ)がある場合、手動での再入力などを依頼する。
まとめ:障害復旧の仕組みを理解し、安定したシステム運用へ
本記事では、データベースの障害を3種類に分類し、それぞれの復旧プロセスを解説しました。復旧の核となるのは、処理を取り消す「ロールバック」と、再現する「ロールフォワード」であり、これらは更新前後を記録したログファイルによって実現されます。特に媒体障害のような深刻な事態ではバックアップが復旧の起点となり、システム障害からの高速な復旧にはチェックポイントの仕組みが不可欠です。これらの用語の役割と相互関係を理解することは、情報処理技術者試験の対策はもちろん、実際のシステム設計や運用におけるRTO/RPOといった目標設定にも直結します。まずは障害の種類と、それに対応する復旧の基本パターンを整理し、知識の定着を図りましょう。

