ロールバックとロールフォワードとは?意味や違いをわかりやすく解説!

ロールバック』と『ロールフォワード』という用語を耳にしたことがあるでしょうか?これらはどちらもデータベースの内容を復旧させる操作を指しますが、その目的や使用タイミングが異なります。

この記事では『ロールバック』と『ロールフォワード』について、以下の内容を図を用いてわかりやすく解説します。

  • ロールバックとは
  • ロールフォワードとは
  • ロールバックとロールフォワードの違い
  • ロールバックとロールフォワードの関連用語
    • トランザクション
    • コミット
    • ジャーナルファイル(ログファイル)
  • ロールバックはソフトウェア開発でも使用される

ロールバックとは

ロールバックとは

ロールバックは、トランザクション(複数の処理をまとめたもの)の処理中に、なんらかの問題が発生して処理が失敗した際に、処理を取り消してデータベースをトランザクション開始前の状態に復旧する操作です。

ロールバックの仕組みを説明します。

  • データベースでトランザクション内の処理1~4を順番に実行する。
  • 処理3の途中でエラーが発生し、処理が停止した。
  • この場合、処理4以降を実行せず、ジャーナルファイル(ログファイル)の「更新前情報」を元に、データベースをトランザクション開始前の状態に復旧する。

「ジャーナルファイル(ログファイル)の更新情報を使って、データベースを更新前の状態に復旧する」のがロールバックです。

ロールフォワードとは

ロールフォワードとは

ロールフォワードはトランザクションの処理が完了した後に、ディスク障害などでデータベース自体が壊れた際に、データベースを更新後の状態に復旧する操作です。

ロールフォワードの仕組みを説明します。なお前提条件として、トランザクション1とトランザクション2が完了して更新したデータベースがあるとします。更新した情報はジャーナルファイル(ログファイル)に書き込まれているとします。

  • ディスク障害などで突然データベースが故障した。
  • この場合、まず、定期的に作成されるバックアップファイルを使用してデータベースを「更新前の状態」に戻す。
  • 次に、トランザクション1とトランザクション2を実行した際に作られたジャーナルファイル(ログファイル)の「更新後情報」を元に、データベースを更新後の状態に復旧する。

「ジャーナルファイル(ログファイル)の更新情報とバックアップファイルを使って、データベースを更新後の状態に復旧する」のがロールフォワードです。

ロールバックとロールフォワードの違い

ロールバック』と『ロールフォワード』の違いを以下の表にまとめます。

ロールバックロールフォワード
タイミングトランザクション処理中トランザクション処理後
目的データベースを更新前の状態に復旧するデータベースを更新後の状態に復旧する
使用する
ファイル
ジャーナルファイルの更新前情報バックアップファイル
ジャーナルファイルの更新後情報

ロールバックとロールフォワードの関連用語

ロールバック』と『ロールフォワード』を理解するには、以下の関連用語も知っておくと役立ちます。

  • トランザクション
  • コミット
  • ジャーナルファイル(ログファイル)

上記の用語について説明します。

トランザクションとコミット

トランザクションはデータベース更新時に切り離すことができない一連の処理です。「すべて成功(トランザクション内の処理を全て反映する)」または「すべて失敗(トランザクション内の処理を全て取り消す)」のどちらかしか許されない仕組みで、データの矛盾を防ぎます。

コミットは、トランザクション内の全ての処理が成功した場合に、データベースの状態を確定する操作です。

例:お金の送金処理金処理

例えば、AさんがBさんにお金を振り込む場合を考えてみましょう。

  • Aさんの口座残高を確認する
  • Aさんの口座残高を減らす
  • Bさんの口座残高を確認する
  • Bさんの口座残高を増やす

例えば、処理4の途中で失敗した場合、「Aさんの口座残高は減っているのに、Bさんの口座残高は増えていない」という状態になってしまいます(データに矛盾が生まれる)。そのため、トランザクションは、処理1~4が全て成功した時だけ、コミットを行います。

ジャーナルファイル(ログファイル)

ジャーナルファイル(ログファイル)は、データベースの更新前後の情報を記録するファイルであり、障害時の復旧に使用します。

  • ロールバック』では、「更新情報」を使用してデータベースを更新前の状態に復旧する
  • ロールフォワード』では、「更新情報」を使用してデータベースを更新後の状態に復旧する

ロールバックはソフトウェア開発でも使用される

ロールバックはデータベースだけでなく、ソフトウェア開発でもよく使われる用語です。

たとえば、新しいアプリケーションをリリースした直後に重大なバグが見つかった場合、旧バージョンに戻す操作をロールバックと呼びます。

本記事のまとめ

この記事では『ロールバック』と『ロールフォワード』について、以下の内容を説明しました。

  • ロールバック
    • トランザクション処理中に問題が発生した場合、データベースを更新前の状態に復旧する操作。
    • 使用ファイル: ジャーナルファイルの「更新前情報」。
    • トランザクションの矛盾を防ぎ、データ整合性を維持する。
  • ロールフォワード
    • データベース障害後に、更新後の状態に復旧する操作。
    • 使用ファイル: バックアップファイルとジャーナルファイルの「更新後情報」。
    • 障害発生時に最新の状態を復旧可能にする。
  • トランザクション
    • 一連の処理をまとめた操作。全て成功または全て失敗のどちらかのみ許容される。
  • コミット
    • トランザクション処理が全て成功した場合に、変更を確定する操作。
  • ジャーナルファイル(ログファイル)
    • 更新前後の情報を記録しており、ロールバックやロールフォワードで復旧に利用される。
  • ソフトウェア開発におけるロールバック
    • リリース後のバグ対応などで旧バージョンに戻す用語

お読み頂きありがとうございました。