今回はデータベースに障害が起きたときにデータを守る
「ロールバック」と「ロールフォワード」の2つについて解説します。
「ロールバック」:取り消して過去に”戻す”処理
処理中(未コミット)だったトランザクションを取り消し、
データ更新前の状態に戻す処理です。
RPGで例えると、
ボス戦の途中でバグってフリーズ(トランザクション処理の失敗)したときに、
「最後にセーブした地点まで戻して、今回の戦いをなかったことにする」のがロールバックにあたります。
「ロールフォワード」:やり直して未来へ”進める”処理
バックアップと更新履歴(ジャーナル)を使って、完了済(コミット済)だったトランザクションを再実行し、障害発生直前まで進める処理です。
RPGで例えると、
ゲーム機本体が物理的に壊れてしまった(物理的なデータベース障害)ときに、
「過去のバックアップ(セーブデータ)から復元し、残っていたプレイログ(操作履歴)を使って、壊れる直前の最新状態まで自動で進めて再現する」行為にあたります。
ロールバックとロールフォワードの違い
まず「発生タイミング」が異なります。
- ロールバックは、トランザクション処理の失敗時。
- ロールフォワードは、物理的に壊れた時。
どちらも「障害前の状態に復旧する」という目的は同じですが、
- セーブ地点まで戻すだけなのがロールバック。
- セーブ地点まで戻した後、ゲームオーバーまでにやっていたことを再現して進めるのがロールフォワードというイメージです。
ロールバックは、主にトランザクション処理の途中で失敗したときにやります。
やりかけのトランザクション処理を取り消すのがロールバックです。
ロールフォワードは、例えばデータベースが物理的に壊れたりした場合にやります。
バックアップを適用した後で、バックアップ以降にやっていたことを再現するのがロールフォワードです。
引用:「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
まとめ
- ロールバック:未完了の処理を取り消して、過去に「戻す」。
- ロールフォワード:完了済の処理を再実行して、最新状態に「進める」。
🍌NanoBanana君による解説漫画