まめぞうの技術メモ

IT関連で勉強したことをメモします

OracleのREDOログとアーカイブログって何だっけ?

先日、Oracleの話題になり、REDOログとアーカイブログの話が出たのですが、うろ覚えだったので復習がてらこの記事を書きます。

OracleのREDOログとアーカイブログって何だっけ?
OracleのREDOログとアーカイブログって何だっけ?

REDOログとは

REDOログは、create、insertやupdateなど、データの変更履歴です。REDOログが書き込まれたファイルのことをREDOログファイルと呼びます。

データベースを障害から復旧する際などに、REDOログファイルに格納された変更履歴を使用します。

LGWR(ログライター)というバックグラウンドプロセスがREDOログバッファというメモリ領域に溜まっている変更履歴をREDOログファイルに書き込みます。

REDOログの多重化について

REDOログは、障害時に使用するものなので、REDOログを多重化しておく必要があります。

REDOログの多重化方法ですが、REDOロググループを作って、その中にREDOログメンバーというファイルを所属させます。REDOログメンバーはディスク(HDD / SSD)障害に備えて、複数のディスクに分散させて配置するのが望ましいです。

REDOロググループですが、1つのロググループに書き込み、ファイルサイズ等の条件に到達すると、次のロググループにログスイッチします。最後のロググループまで一巡すると、また最初のロググループに戻ります。最初のロググループは上書きされます。

ロググループは2つ以上作成する必要があります。そうしないとログスイッチができず、REDOログが際限なく増えてしまいます。

REDOログの多重化
REDOログの多重化

アーカイブログファイルはREDOログファイルをコピーしたもの

アーカイブログは、アーカイブログファイルに保存されています。アーカイブログファイルは、REDOログファイルをコピーしたバックアップです。

後述のアーカイブログモードを適用したときに作成されます。

アーカイブログモードと、ノーアーカイブログモード

アーカイブログを理解するには、バックアップとリストアの概要を理解する必要があります。

Oracleには2つのモードがあります。アーカイブログモードと、ノーアーカイブログモードです。

アーカイブログモード

アーカイブログを取得して、メディア障害等が発生した際に、完全リカバリ(詳細後述)を行うことで、障害発生直前の状態に戻すことを可能にします。

メディア障害とは、HDD等のディスクやディスクコントローラー等に障害が発生し、Oracleを構成するデータファイルが破損することです。

本番環境等可用性の求められる環境ではアーカイブログモードが必須です。

ノーアーカイブログモード

アーカイブログを取得しないので、メディア障害が発生した場合、完全リカバリが出来ません。代わりに、不完全リカバリ=Point-in-Timeリカバリは出来ます。

不完全リカバリとは、データベースを過去の指定した時点に戻すことです。

ノーアーカイブログモードには、他にもDBオンライン時に表領域のバックアップが取れない制約があります。

参考:Oracleホームページ ARCHIVELOGモードとNOARCHIVELOGモード
アーカイブREDOログの管理

完全リカバリについて

完全リカバリは、データベースを障害発生直前の状態に戻すことです。

  1. 過去に取得したバックアップを適用(リストア)し、破損したデータファイルを元に戻す

  2. アーカイブログファイルとREDOログ・ファイルを使って、データファイルを障害直前状態までロールフォワードし、リカバリする

この「2」を実施する際に、アーカイブログファイルがないと、過去に取得したバックアップと、REDOログファイルの間が埋められず、ロールフォワード(過去時点から順次変更履歴を適用していく)できないので、ノーアーカイブログモードでは完全リカバリができないのです。

不完全リカバリ(Point-In-Timeリカバリ)について

不完全リカバリとは、データベースを障害発生直前に戻すのではなく、過去の指定した時点に戻すことです。Point-In-Timeリカバリとも言います。

ノーアーカイブログモードでは、過去のアーカイブログがなく、ロールフォワードできないので、不完全リカバリしか出来ません。

アーカイブログが削除されるタイミング

アーカイブログは、オンラインバックアップを取得した際に、自動で削除されるように設定することが可能です。

完全リカバリを実施する際は、過去のバックアップを適用⇛アーカイブログでロールフォワード、という流れになるので、過去のバックアップ以前のアーカイブログは不要になるからです。

他にも自動削除ではなく、アーカイブログ削除機能を使って、手動で削除することも可能です。

こうして、アーカイブログの増加によるディスク容量の逼迫を抑えることができます。

アーカイブログの自動削除イメージ
アーカイブログの自動削除イメージ

参考:富士通Webサイト
3.3.6 アーカイブログの削除

まとめ

REDOログとアーカイブログファイルとは何か。これらを使って、データベースの復旧を行う仕組みを解説しました。

Oracleはエンタープライズで使われる製品ということもあり、可用性(≒耐障害性)を高めるためにこのような仕組みが使われています。

不明点や誤った記載があればお知らせください。