OracleのREDOログとは?(仕組みを知る!)

OracleのREDOログについて。

この記事の内容はコチラです

  • 「REDOログ」とは?
  • 「REDOログ」はなぜ必要か?

今回は、OracleのREDOログについて紹介します!

OracleのREDOログとは

「OracleのREDOログとは?」を知るには、まずコミットの流れについておさらいしましょう!

Oracleはコミットしてもデータファイルへ書込みをしないのはなぜ?

Oracleは「コミット」することにより処理を確定します。しかしコミットしてもすぐにはデータファイル(.dbf)へ書き込みはしません。

ちなみに、データファイル(.dbf)とはデータそのものが入った物理ファイルです。データファイルへ書き込みするのはチェックポイントが発生したときです。

  • コミット ・・・メモリからREDOログファイルへ更新履歴を書き込む
  • チェックポイント ・・・メモリからデータファイルへ更新データを書き込む

コミットしても「更新データ」をすぐに「データファイル」に書き込まない・・・

違和感ありませんか?

「コミットした確定データ」は「データファイル」とイコールでは?もしコミットしたのにデータファイルに書き込まれる前に障害が発生したら「更新データ」が消えてしまうのでは?

という疑問がわきます。

OracleのREDOログファイル

Oracleにはデータを保障するためのもう一つのファイルがあります。

それがREDOログファイル(.log)です。REDOログファイルはデータベースの「更新履歴」のファイルで、これにより復旧できるというカラクリです。

REDOログはデータベースの「更新履歴ログ」

具体的にみていきます。

まず、コミットするとREDOログバッファからREROログファイルへ「更新履歴」を書き込みます。

この後、チェックポイントが発生すれば、データファイルに「更新データ」が書き込まれますが、その前に障害が発生して「更新データ」が書き込まれなかったとします。

「更新データ」が消えてしまいました。どうしましょう?

クラッシュリカバリでREDOログファイルを使う

このケースでは、Oracleはクラッシュリカバリという機能で復旧します。クラッシュリカバリとは何でしょうか?

クラッシュリカバリで復旧できる!

まず、Oracleは起動時にREDOログファイルとデータファイルを比較します。先ほどの「更新データ」は「データファイル」にはありません。でもREDOログファイルには「更新履歴」があります。

Oracleは「データファイルに更新データがない」を検出し、自動的にREDOログファイルの「更新履歴」から「更新データ」をデータファイルに書き込んで整合性をとってから起動します。

このようにして自動的に失ったデータを復旧します。これをクラッシュリカバリといいます。

REDOログにはデータがあるので安心!

コミットした「更新データ」はデータファイルになくてもREDOログファイルに「更新履歴」があります。だからコミットしたデータがデータファイルになくても大丈夫なのです。

この「REDOログファイル(.log)をもとにデータファイル(.dbf)を作る」という仕組みはOracleの重要な動きの1つです。

まとめ

OracleのREDOログファイルについてまとめます。

  • REDOログはデータベースの「更新履歴ログ」
  • クラッシュリカバリの際、REDOログからデータを復旧できる

参照:REDOログの管理 – Oracle Database管理者ガイド

Oracleには似たようなログにアーカイブログもあります。アーカイブログはこちらを参照してください。

以上、OracleのREDOログファイルの役割でした。

コメント