本記事では、データベースやシステムに障害が発生したときに、データを正しい状態に戻すための「障害回復(リカバリ)」の考え方を整理しながら、チェックポイント、バックワードリカバリ(ロールバック)、フォワードリカバリ(ロールフォワード)といった代表的な機能の役割とイメージを分かりやすく解説します。
1. 障害とリカバリの全体像をつかむ

この章では、そもそも障害が起こると何が困るのか、そしてリカバリ機能がなぜ重要なのかという全体像を押さえます。
障害が起こると何が問題になるのか
システムは常に正常に動いていてほしいものですが、現実には停電やハード故障、ソフトウェアのバグ、人的ミスなど、さまざまな理由で障害が発生します。特にデータベースでは、処理の途中でサーバが停止すると、いくつかのデータだけ更新され、別のデータは古いままといった中途半端な状態が残ることがあります。この状態のまま業務を再開すると、請求金額が合わない、在庫数が実物と一致しないなど、現場に大きな混乱をもたらします。
さらに、障害の種類によっては、データそのものが壊れてしまうこともあります。ディスクの故障でテーブルファイルが読めなくなったり、書き込み中のデータが途中までしか保存されていなかったりするケースです。このような状況では、「何が正しいデータなのか」が分からなくなり、そのままでは業務を続けることができません。だからこそ、障害発生後にデータを安全な状態に戻すための仕組みが必要になります。
障害回復(リカバリ)機能の役割
障害回復(リカバリ)機能の役割は、一言でいえば「障害が起きても、データを矛盾のない状態に戻すこと」です。ポイントは、単にデータが残っているだけでなく、「業務的に意味のある一貫した状態」まで戻せることです。例えば、注文だけが登録されて支払い情報が失われた状態は、データが一部残っていても業務的には困ってしまいます。
そのため、データベースには通常、定期的なバックアップと更新ログの記録機能が備わっています。これらを組み合わせて使うことで、「どの時点まで戻せるのか」「どの更新をやり直すべきか」を判断し、可能な限り最新に近い整合した状態へ復旧します。障害発生を完全に防ぐことはできないため、「起きた後のダメージをどこまで小さくできるか」がリカバリ機能の重要な役割になります。
2. ログとチェックポイントで復旧を早くする

この章では、リカバリ処理を効率よく行うための仕組みとして、チェックポイントの役割を解説します。
チェックポイント
チェックポイントとは、「この時点までは、データベースへの更新がデータファイルに書き込まれている」と区切りを付けておくポイントのことです。データベースでは、更新処理が行われるたびに、その内容をログファイルに時系列で記録します。しかし、障害が起きたときに最初のログからすべてを読み直していては、復旧に非常に時間がかかってしまいます。
そこで、一定間隔でメモリ上の変更をディスク上のデータベースに書き出し、「ここまでの状態はディスクとログが一致している」と印を付けます。これがチェックポイントです。障害時の復旧では、最後に記録されたチェックポイントの時点の状態を出発点とし、その後に記録されたログだけをたどればよくなります。こうすることで、復旧に必要な処理量を大幅に減らし、システムの停止時間を短くできます。
3. 過去に戻るバックワードリカバリ(ロールバック)

この章では、「少し前の正常な状態まで時間を戻す」というイメージで行うバックワードリカバリ(ロールバック)について説明します。
バックワードリカバリ(ロールバック)
バックワードリカバリは、障害や誤操作などによってデータに重大な異常が発生したときに、「障害が起きる前の状態」へ戻す復旧方法です。一般的には、定期的に保存しているバックアップファイルを使い、その取得時点の状態にデータベースを戻します。例えば、毎日深夜にバックアップを取っていれば、少なくとも前日深夜の時点まで巻き戻すことができます。
ただし、バックアップはあくまで「過去の瞬間のコピー」なので、その後に行われた正しい更新結果は含まれていません。そのため、バックアップだけで復旧すると、障害発生までの間に行われた正常な取引データがすべて失われてしまいます。そこで実際には、バックアップで戻したあとにログを組み合わせて復旧を進めることが多く、その中でも「不要な更新を打ち消す」動きがバックワードリカバリの重要な役割になります。
バックワードリカバリの特徴
バックワードリカバリの強みは、「どこかに正常な状態のコピーが残っていれば、そこまでは確実に戻れる」という安心感です。データベース全体が壊れてしまった場合でも、バックアップさえ無事なら、少なくともその時点までは復旧できます。一方で、「どの時点まで戻すか」を間違えると、戻し過ぎて多くの取引をなかったことにしてしまうリスクもあります。
そのため、運用の現場では、「バックアップをどの頻度で取るか」「バックアップから戻したあとにどこまでログで追い付けるか」といった点を考えながら、バックワードリカバリの方針を決めておきます。障害時に慌てて判断しなくて済むよう、平常時から手順を整えておくことが大切です。
4. 先へ進んで追い付くフォワードリカバリ(ロールフォワード)

この章では、ログを元に「新しい状態へ追い付いていく」フォワードリカバリ(ロールフォワード)について解説します。
フォワードリカバリ(ロールフォワード)
フォワードリカバリは、バックアップなど過去の状態に戻したデータベースに対して、「その後に行われた更新をログから再現していく」復旧方法です。例えば、前日のバックアップからデータベースを戻したあと、そこから障害発生直前までに記録された更新ログを順番に適用していくことで、できるだけ最新の状態に近付けます。この「過去から現在に向かって進んでいく」イメージがロールフォワードです。
この際、障害発生時に進行中だったトランザクションについては注意が必要です。途中までしか実行されていない更新は、中途半端な状態を残さないように打ち消すか、やり直す必要があります。ログには、トランザクションの開始や終了の情報も記録されているため、それを手掛かりに「途中で終わってしまった処理」を見分け、整合性を保ちながらフォワードリカバリを行っていきます。
フォワードリカバリの特徴
フォワードリカバリを使うことで、「バックアップ取得時点」と「障害発生時点」の間に行われた正しい更新を、可能な限り復元できます。その結果、障害によって失われるデータ量を小さくできるのが大きなメリットです。特に、頻繁に取引が行われるシステムでは、この差が業務への影響を大きく左右します。
一方で、フォワードリカバリを行うためには、「ログが欠けていないこと」「ログから正しい順番で更新を適用できること」が前提になります。ログの世代管理や保存期間、チェックポイントとの組み合わせなど、平常時からの丁寧な運用が不可欠です。また、適用するログが多ければ多いほど復旧時間も長くなるため、どの程度の復旧時間を許容できるのかを考えたうえで、バックアップやチェックポイントの間隔を設計する必要があります。
まとめ
障害回復(リカバリ)は、「障害は必ず起こり得るもの」という前提に立ち、データベースをどのように守るかを考えるための重要な仕組みです。障害が発生すると、データの一部だけが更新されたり、ファイル自体が壊れたりして、整合性の取れない状態になる可能性があります。そこで、バックアップや更新ログ、チェックポイントなどを組み合わせて、矛盾のない状態までデータを戻すのがリカバリ機能の役割です。
この中で、チェックポイントは「ここまでは確実に書き込まれている」という目印として機能し、復旧時にたどるべきログ範囲を絞り込むのに役立ちます。バックワードリカバリ(ロールバック)は過去の正常な状態まで戻るための方法であり、フォワードリカバリ(ロールフォワード)はログを適用することで最新の状態に追い付いていく方法です。両者を組み合わせることで、「できるだけデータを失わず、かつ整合性のある状態」に復旧できるようになります。
学習の際には、細かな手順を覚えるよりも、「チェックポイント=復旧の起点」「バックワードリカバリ=時間を戻す」「フォワードリカバリ=ログで先へ進む」というイメージを持っておくと理解しやすくなります。そして、これらの機能が最終的には「障害が起きても業務を続けられるようにする」ためのものだと意識しておくと、関連する用語同士のつながりもスムーズに整理できるでしょう。


コメント