『ロールバック』と『ロールフォワード』という用語を耳にしたことがあるでしょうか?これらはどちらもデータベースの内容を復旧させる操作を指しますが、その目的や使用タイミングが異なります。
この記事では『ロールバック』と『ロールフォワード』について、以下の内容を図を用いてわかりやすく解説します。
- ロールバックとは
- ロールフォワードとは
- ロールバックとロールフォワードの違い
- ロールバックとロールフォワードの関連用語
- トランザクション
- コミット
- ジャーナルファイル(ログファイル)
- ロールバックはソフトウェア開発でも使用される
ロールバックとは
ロールバックは、トランザクション(複数の処理をまとめたもの)の処理中に、なんらかの問題が発生して処理が失敗した際に、処理を取り消してデータベースをトランザクション開始前の状態に復旧する操作です。
ロールバックの仕組みを説明します。
- データベースでトランザクション内の処理1~4を順番に実行する。
- 処理3の途中でエラーが発生し、処理が停止した。
- この場合、処理4以降を実行せず、ジャーナルファイル(ログファイル)の「更新前情報」を元に、データベースをトランザクション開始前の状態に復旧する。
「ジャーナルファイル(ログファイル)の更新前情報を使って、データベースを更新前の状態に復旧する」のがロールバックです。
ロールフォワードとは
ロールフォワードはトランザクションの処理が完了した後に、ディスク障害などでデータベース自体が壊れた際に、データベースを更新後の状態に復旧する操作です。
ロールフォワードの仕組みを説明します。なお前提条件として、トランザクション1とトランザクション2が完了して更新したデータベースがあるとします。更新した情報はジャーナルファイル(ログファイル)に書き込まれているとします。
- ディスク障害などで突然データベースが故障した。
- この場合、まず、定期的に作成されるバックアップファイルを使用してデータベースを「更新前の状態」に戻す。
- 次に、トランザクション1とトランザクション2を実行した際に作られたジャーナルファイル(ログファイル)の「更新後情報」を元に、データベースを更新後の状態に復旧する。
「ジャーナルファイル(ログファイル)の更新後情報とバックアップファイルを使って、データベースを更新後の状態に復旧する」のがロールフォワードです。
ロールバックとロールフォワードの違い
『ロールバック』と『ロールフォワード』の違いを以下の表にまとめます。
ロールバック | ロールフォワード | |
タイミング | トランザクション処理中 | トランザクション処理後 |
目的 | データベースを更新前の状態に復旧する | データベースを更新後の状態に復旧する |
使用する ファイル | ジャーナルファイルの更新前情報 | バックアップファイル ジャーナルファイルの更新後情報 |
ロールバックとロールフォワードの関連用語
『ロールバック』と『ロールフォワード』を理解するには、以下の関連用語も知っておくと役立ちます。
- トランザクション
- コミット
- ジャーナルファイル(ログファイル)
上記の用語について説明します。
トランザクションとコミット
トランザクションはデータベース更新時に切り離すことができない一連の処理です。「すべて成功(トランザクション内の処理を全て反映する)」または「すべて失敗(トランザクション内の処理を全て取り消す)」のどちらかしか許されない仕組みで、データの矛盾を防ぎます。
コミットは、トランザクション内の全ての処理が成功した場合に、データベースの状態を確定する操作です。
例:お金の送金処理金処理
例えば、AさんがBさんにお金を振り込む場合を考えてみましょう。
- Aさんの口座残高を確認する
- Aさんの口座残高を減らす
- Bさんの口座残高を確認する
- Bさんの口座残高を増やす
例えば、処理4の途中で失敗した場合、「Aさんの口座残高は減っているのに、Bさんの口座残高は増えていない」という状態になってしまいます(データに矛盾が生まれる)。そのため、トランザクションは、処理1~4が全て成功した時だけ、コミットを行います。
ジャーナルファイル(ログファイル)
ジャーナルファイル(ログファイル)は、データベースの更新前後の情報を記録するファイルであり、障害時の復旧に使用します。
- 『ロールバック』では、「更新前情報」を使用してデータベースを更新前の状態に復旧する
- 『ロールフォワード』では、「更新後情報」を使用してデータベースを更新後の状態に復旧する
ロールバックはソフトウェア開発でも使用される
ロールバックはデータベースだけでなく、ソフトウェア開発でもよく使われる用語です。
たとえば、新しいアプリケーションをリリースした直後に重大なバグが見つかった場合、旧バージョンに戻す操作をロールバックと呼びます。
本記事のまとめ
この記事では『ロールバック』と『ロールフォワード』について、以下の内容を説明しました。
- ロールバック
- トランザクション処理中に問題が発生した場合、データベースを更新前の状態に復旧する操作。
- 使用ファイル: ジャーナルファイルの「更新前情報」。
- トランザクションの矛盾を防ぎ、データ整合性を維持する。
- ロールフォワード
- データベース障害後に、更新後の状態に復旧する操作。
- 使用ファイル: バックアップファイルとジャーナルファイルの「更新後情報」。
- 障害発生時に最新の状態を復旧可能にする。
- トランザクション
- 一連の処理をまとめた操作。全て成功または全て失敗のどちらかのみ許容される。
- コミット
- トランザクション処理が全て成功した場合に、変更を確定する操作。
- ジャーナルファイル(ログファイル)
- 更新前後の情報を記録しており、ロールバックやロールフォワードで復旧に利用される。
- ソフトウェア開発におけるロールバック
- リリース後のバグ対応などで旧バージョンに戻す用語
お読み頂きありがとうございました。