データベース

ロールバックとロールフォワードの違いを学ぼう!

2020年2月4日

突然ですが、みなさんはデータベースのデータが消えるなんて考えながら生活していますでしょうか?

メールやSNS、アプリのデータなど、日々新しいものが登録され、更新されていることが当たり前の生活の中で突然データが消えることなんて想像できないのが普通かと思います。

でも、データがコンピュータの上で管理されている以上、消えることはあるのです!(紙で管理していても消えることはありますが...)

そんな時のためにデータベースを「日々バックアップ」することでデータが消えてしまった時に復旧する仕組みがあるのですが、バックアップは時間がかかるため、頻繁に行う訳にはいきません。

そのため、ログファイルというものを頻繁にバックアップすることで、直近のデータを復元することができるのです。

今回はこのログファイルを使ったバックアップの方法として「ロールバック」と「ロールフォワード」という手法があるため、この違いを解説します!

2種類のファイルのバックアップとは?

データベースのバックアップにはデータベースの情報を全てバックアップするのが基本となっており、バックアップの取り方としては「差分バックアップ」と「増分バックアップ」があります。詳しくは以下記事も併せて読んでみてください。

そして、このバックアップですが、時間が掛かる処理なので、あまり頻繁に実施するわけにはいきません。なので、1日に1回取得するぐらいが通常です。

そうなると以下の図にありますように、午前3時にバックアップ取得後、その日の13時にハードウェアやソフトウェアの障害により、データが消えてしまった場合、「13時 - 3時 = 10時間」のデータ登録や更新した情報が失われてしまうことになります...

通常のバックアップの復旧ポイント

このような状況にならないために、日時のバックアップの他に別の仕組みでのバックアップを行います!

それはデータベースを操作した時に出力されるログファイル数分や数時間周期でバックアップすることです。これにより、データの変更を頻繁に記憶することができ、障害があった際の影響を少なくすることができます。

このログファイルですが、アーカイブログトランザクションログなんて呼び方もされますが、このログの中身は、実行されたSQL文となっておりますので、このログを使うことで日時バックアップ以降に実行されたものと同じSQL操作を行うことで、データ消失直前までデータを復旧させることができます!

まとめると、バックアップには以下の2種類の方法があることになります。

バックアップの種類

  • データベースの内容 : 低頻度(日次、週次、月次など)
  • ログファイルの内容 : 高頻度(数分、数時間など)

そして、この2種類のバックアップからのデータ復元方法は以下の手順となりますね。

バックアップからのデータ復元方法

  • 最後に取得したデータベースのバックアップ内容を丸々復元する
  • ログに記録されているSQL文から、最後のバックアップ以降に実行されたものを再実行する

これにより、障害ポイントから直近のデータの復旧ができるようになります!

では、いよいよログファイルを使った「ロールバック」 と「ロールフォワード」の違いを説明します!

ロールバックとは?

ロールバック(rollback)という言葉の意味は「巻き戻し」です。そうです、言葉の通りデータベースのロールバックと言ったら、データを過去のものに戻すのです。

データを巻き戻す時とは?と思うかもしれませんが、データを扱っていると、間違ってデータを登録してしまったり、削除してしまったりすることが人為的にも機械的(ソフトウェア障害)にも発生します。

そんな時はログファイル(UNDOログ)を使って、正常な状態までデータを巻き戻すことができます。これを「ロールバック」いいます。実行した処理を取り消すので、以下の図のようなイメージになります。

ロールバックの仕組み

ロールフォワードとは?

続いてロールフォワードです。ロールバック(巻き戻し)の反対なので、早送りかと思いますが、イメージ的には「先(未来へ)へ進める」ような感じです。(ちょっと分かり難いかも...)

ログファイル(REDOログ)に記憶されているSQL文を実行して、障害発生する直前の状態までデータを更新することができます。

前述のロールバックと似ていますが、使い方としては対照的なので、混同しないよう気を付けましょう!

こちらも以下にイメージを図にしてみました。

ロールフォワードの仕組み

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

ログファイルを使った二つのデータ復元方法に関しての違いは以下の通りですね。

違い

  • ロールバック : 実行した処理を取り消して、データを後ろに戻す。データベースの利用中にSQLの実行失敗やデッドロックなどでたびたび発生する
  • ロールフォワード : まだ実行されていない処理を実行してデータを前に進める。障害復旧時に使われる処理なので、滅多に発生しない(発生しない方が良い)

まとめ

今回はデータベースにおけるバックアップの種類とロールバック、ロールフォワードに関して学んでみました。

ロールバックとロールフォワードは障害の内容によって使い分ける必要があるのですね。

重要なデータを扱うシステムはバックアップを頻繁に行う必要があるのですが、やり過ぎるとデータ量が莫大なものになりますので、最適な設計も必要ですね!

そして、定期的にバックアップデータからの復元の訓練をしていないと、いざ障害が発生した時になかなかデータを復元できないことがあるのは「あるある」ですよね(汗)

人生もロールバックできたら良いと思う事ありますよね(笑)

以上です!

-データベース