連載
» 2004年08月27日 00時00分 公開

ORACLE MASTER Silver DBAポイント解説(3):制御ファイルとREDOログ・ファイルの管理

[小野寺智子,@IT]

これまで連載してきた「ORACLE MASTER Goldポイント解説」では第4回までは「PL/SQL」を解説し、第5回以降にDBAの解説を行っている。しかし、2003年10月の資格制度の変更に合わせ、連載タイトルを「新ORALCE MASTER Silver DBAポイント解説」に変更する。そのため、本連載は「ORACLE MASTER Goldポイント解説」で紹介した内容を確認したうえでお読みいただきたい。


 今回は制御ファイルとREDOログ・ファイルについて解説をしていきます。Oracleで必須の構成ファイルとして存在するこの2つのファイルの特徴について押さえてください。制御ファイルはデータベースの整合性を保つためになくてはならないファイルです。また、REDOログ・ファイルはデータの復旧時になくてはならないファイルです。どちらにせよ、Oracleが問題なく稼働するために、それぞれのファイルが重要な役割を果たしています。それでは、それぞれの特徴・管理を紹介します。

制御ファイルの概要と内容

 制御ファイルは、データベースの現在の状態を記録するファイルです。データベースを起動したり、矛盾のない状態を維持するために必要なバイナリファイルです。ファイルの情報は、Oracle Serverによって変更されます。ですからデータベース管理者は、制御ファイルの内容を変更することはできません。

 また制御ファイルは、データベースを矛盾のない状態に維持するために、制御ファイルの内容と、ファイルの名前や場所が異なる場合は、データベースをオープンすることができません(図1)。

図1 制御ファイルの仕組み 図1 制御ファイルの仕組み

 制御ファイルが持っている情報は、データベースの構成情報と、データベースに矛盾がない状態を維持するための情報が記録されています。以下、制御ファイルが持つ情報を紹介します。

  • データベース名
  • データ・ファイルやREDOログ・ファイルの名前と場所
  • 現行のREDOログ・ファイルのログ順序番号
  • チェックポイント情報
  • データベース作成時のタイム・スタンプなど

 制御ファイルはデータベースに関する重要な内容を維持しているわけですから、破損した場合は制御ファイルをリカバリしなくてはいけません。このように制御ファイルが使用不可になった場合、迅速にリカバリするためにはどのような対策があるのか次に紹介します。

制御ファイルの多重化

 制御ファイルは最低1つ存在すれば、Oracleは稼働します。しかし1つしかない場合、それが障害に遭うと、データベースはオープンできません。つまり、データベースがオープンできないと、データベースを使用することができません。では、制御ファイルが使用不可になった場合、迅速にリカバリするにはどうしたらよいでしょうか。

 制御ファイルを迅速にリカバリするには、制御ファイルを異なるディスクに多重化することです。Oracleでは最大8つまで多重化することができます。ここで注意が必要なのは、多重化したファイルの1つが破損しても、データベースは正しく機能しません。

 では、制御ファイルを多重化する方法を2つ紹介します。

●データベース作成時に、初期化パラメータファイルを使用して多重化する方法

  データベース作成時にCONTROL_FILESパラメータに複数の制御ファイルを指定します。また、OMFを使用した場合はCONTROL_FILESパラメータが指定されていなくても、制御ファイルが作成されます。

●データベース作成後に、制御ファイルを追加して多重化する方法

  データベース作成後に制御ファイルを多重化する場合は、SPFILE、PFILEのどちらを使用しているかによって異なります。以下、SPFILEによる多重化とPFILEによる多重化をご紹介します。

●SPFILEによる制御ファイルの多重化

 SPFILEを使用して運用している場合は、以下の点に注意をしてください。

 SPFILEはバイナリ形式なので、直接変更することができません。そこで、ALTER SYSTEM文を使用してSPFILEの内容を変更します。SPFILEをALTER SYSTEM文で変更した後に、Oracle Serverを停止します。各OSのコマンドで、既存の制御ファイルをALTER SYSTEM文で変更した名前をコピーします。それから、データベースをオープンします。

ALTER SYSTEM SET control files =
’/home/oradata/u01/cotl01.ctl’,
‘/home/oradata/u02/cotl02.ctl’
SCOPE = SPFILE;

●PFILEによる制御ファイルの多重化

 PFILEを使用している場合は一度データベースを停止してから作業を行います。停止後に既存の制御ファイルを新しい場所にコピーし、PFILEのCONTROL_FILESパラメータに新しい制御ファイル名を追加します。

制御ファイルのバックアップ

 何らかの原因で障害が発生し、制御ファイルをリカバリしなければいけない場合、制御ファイルのバックアップを作成しておく方法もあります。Oracleでは、バイナリ形式でバックアップを作成する方法とトレースファイルにバックアップする方法があります。どちらの形式でバックアップするにしろ、データベースの物理構造を変更した後は、制御ファイルのバックアップを作成してください。

 それぞれの構文は以下のとおりです。

ALTER DATABASE BACKUP CONTROLFILE
TO ’/home/oradata/u01/cotl01.ctl’;
バイナリ形式のバックアップ

●トレースファイルにバックアップ

ALTER DATABASE BACKUP CONTROLFILE
TO TRACE;
トレースファイルにバックアップ

 また、トレースファイルにバックアップを作成した場合、制御ファイルの一部の内容を確認することができます(画面1)。

画面1 トレースファイルにバックアップした制御ファイルの内容 画面1 トレースファイルにバックアップした制御ファイルの内容

制御ファイルの情報の取得

 制御ファイルのさまざまな情報を調べる場合は、以下の動的パフォーマンス・ビューを使用します。例としてV$CONTROLFILEを実行した結果を紹介します。

V$CONTROLFILE:制御ファイルの名前を取得する場合に実行します。

SQL> select * from v$controlfile;
STATUS NAME
------- ---------------------------------
    /HOME/ORADATA/U01/COTL01.CTL
    /HOME/ORADATA/U02/COTL02.CTL

 制御ファイルから取得される動的パフォーマンス・ビューには以下のものがあります。

  • V$DATABASE
  • V$DATAFILE
  • V$LOGなど

REDOログ・ファイルの概要

 REDOログ・ファイルは、データに対して行われたすべての変更履歴を記録するファイルです。そして、REDOログ・ファイルに記録された変更履歴を基に、障害時に失われたデータのリカバリを行います。

 REDOログ・ファイルが記録している内容は、表に格納しているデータの変更だけではありません。索引の付いている列に対して変更を行った場合、索引のデータの変更も記録します。

 REDOログ・ファイルを使用した回復方法には、2つの方法があります。

REDOログ・ファイルの構造

 REDOログ・ファイルは循環して使用されます。よって、最低でも2つは存在していなければいけません。どのような構造になっているかは、次に紹介する図2をご覧ください。

図2 REDOログ・ファイルの構成 図2 REDOログ・ファイルの構成

 図から分かるように、同じ内容を持つREDOログ・ファイルをひとまとめにしたものが、REDOログ・グループです。そして、REDOログ・グループ内に存在するコピーファイル1つ1つが、REDOログ・メンバーです。

 そして、REDOログ・グループ内のREDOログ・ファイルがいっぱいになると、次のグループのREDOログ・ファイルに書き込みます。

ログ・スイッチとチェックポイント

 最初にREDOログ・ファイルの動作の説明をしてから、ログ・スイッチとチェックポイントの説明に移ります。

 データベースに対して行われたすべての変更内容は、最初にREDOログ・バッファに格納されます。REDOログ・バッファ内の情報はバックグラウンドプロセスのLGWRによって、REDOログ・バッファから、REDOログ・ファイルに書き込まれます。LGWRは次のタイミングでREDOログ・バッファからREDOログ・ファイルへ書き込みを行います。LGWRがREDOログ・バッファからREDOログ・ファイルに書き込むタイミングは以下のとおりです。

  • トランザクションのコミット時
  • REDOログ・バッファの3分の1がいっぱいになったとき
  • タイムアウト発生時(3秒)
  • DBWnがデータベース・バッファ・キャッシュ内の情報をデータ・ファイルに書き込む前

 この一連の動作の中で、注目したい点があります。REDOログ・ファイルは循環して使用されるので、REDOログ・ファイルがいっぱいになると次のREDOログ・ファイルに書き込みを行います。そのタイミングで起こる動作を「ログ・スイッチ」といいます。

 また、REDOログ・ファイルは障害時に使用するファイルなので、遅延書き込みをしません。逆に、データ・ファイルは遅延書き込みをします。ですから、どこかでREDOログ・ファイルとデータ・ファイルとの間に矛盾が生じないようにしなければいけません。そのイベントのことを「チェックポイント」といいます。チェックポイントは以下のタイミングで発生します。

  • ログ・スイッチが発生したとき
  • インスタンスがABORT以外で停止されたとき
  • ALTER TABLESPACE文で任意の表領域をオフラインにしたときなど

 そして、CKPTによってデータ・ファイルのヘッダと、制御ファイルを更新します。チェックポイントが頻繁に起こるとパフォーマンスに影響を与えるので好ましくありません(図3)。

図3 ログ・スイッチとチェックポイントのタイミング 図3 ログ・スイッチとチェックポイントのタイミング

 また、REDOログ・ファイルが小さいと、チェックポイントが頻繁に起こります。

 その場合、チェックポイントが成功しないこともあり、画面2のようなメッセージが、アラート・ファイルに出力されます。ですから、あまり小さいREDOログ・ファイルは好ましくありません。もし、アラート・ファイルに画面2のようなメッセージが表示されたら、REDOログ・ファイルの追加したり、サイズを大きくするといった検討をしてください。

画面2 チェックポイントが成功しなかった場合に、アラートファイルに出力されるメッセージ 画面2 チェックポイントが成功しなかった場合に、アラートファイルに出力されるメッセージ

●ログ・スイッチとチェックポイントの強制実行

 強制的に、ログ・スイッチ、チェックポイントを行う場合は以下の構文を発行します。

 これらの構文のポイントは、システム制御文といって、Oracle Serverのインスタンスにかかわる部分に対して、何らかのアクションを起こす際に使用します。

ALTER SYSTEM SWITCH LOGFILE;
ログ・スイッチの強制実行
ALTER SYSTEM CHECKPOINT;
チェックポイントの強制実行

REDOログ・グループとREDOログ・メンバーの追加・削除

 ここからは、主にREDOログ・ファイルに関する構文と構文の実行後の状態を紹介していきます。

 REDOログ・グループとREDOログ・メンバーの違いをしっかり押さえてください。また、ここで紹介する構文はデータベース・ファイルに対して何らかのアクションを起こす際に使用する構文です。

 まずはREDOログ・グループの追加とREDOログ・メンバーの追加です。

ALTER DATABASE ADD LOGFILE GROUP3
('/home/oradata/u03/log03a.rdo', '/home/oradata/u04/log03b.rdo') SIZE 5M;
REDOログ・グループの追加
ALTER DATABASE ADD LOGFILE MEMBER
‘/home/oradata/u03/log01a.rdo’ TO GROUP 1,
‘/home/oradata/u03/log01b.rdo’ TO GROUP 2,
‘/home/oradata/u03/log01c.rdo’ TO GROUP 3;
REDOログ・メンバーの追加

 REDOログ・グループ、REDOログ・ファイルを削除する場合は、注意をしてください。

●REDOログ・グループの削除

 REDOログ・グループを削除する場合は、1つのインスタンスに2つ以上のREDOログ・グループがないと削除できません。

ALTER DATABASE DROP LOGFILE GROUP 3;
REDOログ・グループの削除

●REDOログ・メンバーの削除

REDOログ・メンバーを削除する場合は、グループ内で最後のREDOログ・メンバーである場合は削除できません。

ALTER DATABASE DROP LOGFILE MENBER
‘/home/oradata/u03/log03c.rdo’;
REDOログ・メンバーの削除

 REDOログ・グループ、REDOログ・メンバーともに、上記の構文を実行しただけでは、OSファイルまで削除しません。別途、各OSのコマンドで削除する必要があります。また、アクティブ、現行のREDOログ・グループ、REDOログ・メンバーを削除することはできません。

 REDOログ・ファイルを初期化・再配置・改名する場合には起動モードをMOUNTモードで実行します。理由は、オープン状態で初期化や再配置を行うと、制御ファイルの情報と矛盾が生じるからです。

●REDOログ・ファイルの初期化

 REDOログ・メンバーがすべて壊れた場合などに実行する文です。

ALTER DATABASE CLEAR LOGFILE
'/home/oradata/u03/log03a.rdo';
REDOログ・ファイルの初期化

●REDOログ・ファイルの再配置

 データベースをMOUNTモードにし、文を実行する前に、各OSのコマンドで移動先を指定します。

ALTER DATABASE RENAME FILE
'/home/oradata/u03/log03a.rdo’ TO ‘/home/oradata/u05/log05a.rdo';
REDOログ・ファイルの再配置

REDOログ・ファイルの情報の取得

 REDOログ・ファイルのさまざまな情報を調べる場合は、以下の動的パフォーマンス・ビューを使用します。

  • V$LOG
  • V$LOGFILE

アーカイブ・ログ・ファイル

 REDOログ・ファイルは循環して使用されるファイルです。例えば、グループが3つあった場合は、3つ目のREDOログ・ファイルがいっぱいになると、以前のファイルを上書きします。しかし、障害が発生してREDOログ・ファイルを使用して復旧をした場合、上書きされた以前の情報は復旧できません。そのような事態に備えてOracleでは、REDOログ・ファイルのコピーができるように設定できます(図4)。

図4 アーカイブモードの動作 図4 アーカイブモードの動作

 そして、Oracleでは、REDOログ・ファイルの運用モードを2通り用意しています。

  • NOARCHIVELOGモード

 運用モードをNOARCHIVEモードにした場合は、REDOログ・ファイルが一巡した際、以前のファイルを上書きします。

  • ARCHIVELOGモード

 運用モードをARCHIVELOGモードにした場合は、いっぱいになった以前のファイルのコピーを作成します。ARCHIVEが終了するまで、REDOログ・ファイルは上書きされません。

 今回は制御ファイルとREDOログ・ファイルについて説明をしました。冒頭でも紹介しましたが、2つとも、Oracleが問題なく稼働するために重要な役割を果たしています。また、両ファイルとも、多重化することを忘れないでください。

 今回までが、どちらかといいますと、物理的な内容を紹介してきました。次回からは、表領域の紹介を筆頭に論理的な部分の説明に入ります。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。