TOP > REDOログファイルのメンテナンス

REDOログファイルのメンテナンス


  1. REDOログファイルとは
  2. REDOログの作成・管理
  3. REDOログ情報の収集
  4. オンラインREDOログファイルのアーカイブ


REDOログファイルとは

REDOログ・ファイルは、データベースに対するすべての変更情報を記録しており、データベースに障害が発生した場合に、データ・ファイルを最新の状態に復元すために使用される。
インスタンス回復にはREDOログファイルが必要。

オンラインREDOログの使用

オンラインREDOログ

ファイル配置の計画

ディスク障害に対応するため、REDOロググループ内の各メンバはそれぞれ別のハードディスクに配置するのが望ましい。

よって、3つのログファイルメンバを持つグループの場合、ディスクは3つ用意するのが理想。(ディスクI/Oの競合も減る)

ログスイッチ、チェックポイント

●Oracleサーバは全てのデータ変更をREDOログバッファ(メモリ)に記録し、以下のタイミングで現行のREDOロググループに書き込む。

●ログスイッチ

●チェックポイント

●チェックポイントが発生したときの処理

  1. DBWRがデータベースバッファキャッシュ内の変更済みブロックをデータファイルに書き込む
  2. CKPTが全ての制御ファイルとデータファイルのヘッダを変更する

※チェックポイントは、ログスイッチ発生時以外でも

に発生する。


REDOログの作成・管理

REDOログファイルを作成するときには、グループのメンバを多重化し、異なるディスクに配置することが重要である。 こうすることにより、ディスク障害が原因でグループの全メンバが使用不可能になることを防ぐ。

  1. REDOロググループの追加
  2. REDOログメンバの追加
  3. REDOログファイルの改名、再配置
  4. REDOロググループの削除
  5. REDOログメンバの削除
  6. REDOログファイルの初期化

1.REDOロググループの追加
ALTER DATABASE [データベース名]
ADD LOGFILE [GROUP グループ番号] ('ファイル名', 'ファイル名',...) SIZE 1M;

例)ALTER DATABASE ADD LOGFILE GROUP 10 ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo') SIZE 500K;

2.REDOログメンバの追加
ALTER DATABASE [データベース名]
ADD LOGFILE MEMBER
['ファイル名' [REUSE], 'ファイル名' [REUSE],...] TO [GROUP グループ番号] ,...;

例)ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO GROUP 2;

例)ALTER DATABASE db1 ADD LOGFILE MEMBER '/disk3/log1c.rdo' TO GROUP 1,'/disk3/log2c.rdo' TO GROUP 2,'/disk3/log3c.rdo' TO GROUP 3;

※既存のファイルを利用する場合は、REUSEオプションを指定する。この場合、既存ファイルは追加するグループ内の他のメンバと同じサイズでなければならない。
※既存ロググループにファイルを追加する時にサイズ指定をするとエラーになる。
※新規ロググループ追加時にはサイズ指定をする必要があり、REUSEオプションは使用できない。

3.REDOログファイルの改名、再配置
ALTER DATABASE [データベース名]
RENAME FILE 'ファイル名' [,'ファイル名',...] TO 'ファイル名' [,'ファイル名',...];

-------------------------- 例 --------------------------
SQL> SHUTDOWN;
SQL> EXIT;

% cp /disk1/log1b.rdo /disk4
OSコマンドを使用して物理ファイルをコピー後、SQL*Plusを起動

SQL> CONNECT / AS SYSDBA
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE db1 RENAME FILE '/disk1/log1b.rdo' TO '/disk4/log1b.rdo';
SQL> ALTER DATABASE OPEN;

※ALTER DATABASE文ではREDOログファイルを改名してもファイル内のポインタが変わるだけで、OSファイルが物理的に移動・改名することはない
Oracle8iからは、現行グループでなければOPEN時でも行なえる。

4.REDOロググループの削除
ALTER DATABASE [データベース名]
DROP LOGFILE [GROUP グループ番号] ('ファイル名', 'ファイル名',...);
※ALTER DATABASE文でREDOロググループを削除しても、OSファイルが物理的に削除されることはない

例)ALTER DATABASE db1 DROP LOGFILE GROUP 10;

5.REDOログメンバの削除
ALTER DATABASE [データベース名]
DROP LOGFILE MEMBER
['ファイル名' [REUSE], 'ファイル名' [REUSE],...];
※ALTER DATABASE文でREDOログメンバを削除しても、OSファイルが物理的に削除されることはない

例)アクティブグループからメンバを削除する
ALTER SYSTEM SWITCH LOGFILE; <--- 強制的にログスイッチを発生させる
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log2b.rdo';

6.REDOログファイルの初期化
ALTER DATABASE [データベース名]
CLEAR [UNARCHIVED] LOGFILE [GROUP グループ番号] ('ファイル名', 'ファイル名',...);
※REDOログファイルの初期化は、削除/追加と同じ動作であるが、アーカイブされていない場合など削除できない場合に使用すると便利である。

●次の場合、REDOロググループの削除はできない

  1. REDOロググループの削除によってインスタンス内のロググループが一つになってしまう場合
  2. アクティブなREDOロググループを削除しようとした場合
  3. アーカイブモードで稼動しているデータベースで、アーカイブされていないREDOロググループを削除しようとした場合

●次の場合、REDOログメンバの削除はできない

  1. 削除されるメンバが所属グループ最後の有効メンバである場合
  2. アーカイブモードで稼動しているデータベースで、アーカイブされていないREDOロググループのメンバを削除しようとした場合


REDOログ情報の収集

  1. SQL文 ARCHIVE LOG LIST; の発行
  2. V$DATABASE 動的データディクショナリの検索
  3. V$INSTANCE 動的データディクショナリの検索
  4. V$LOG, V$LOGFILE 動的データディクショナリの検索

動的データディクショナリの検索
SQL> ARCHIVE LOG LIST; 
データベース・ログ・モード     アーカイブ・モードなし
自動アーカイブ                 使用禁止
アーカイブ先                   D:\Oracle\Ora81\RDBMS
最初のオンライン・ログ順序番号     26
現行のログ順序番号             29

SQL> select LOG_MODE from V$DATABASE;

LOG_MODE    
------------
NOARCHIVELOG


SQL> select ARCHIVER  from V$INSTANCE;

ARCHIVE
-------
STOPPED


SQL> select * from V$LOG;

   GROUP#   THREAD# SEQUENCE#     BYTES   MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
--------- --------- --------- --------- --------- --- ---------------- ------------- ----------
        1         1        29   1048576         1 NO  CURRENT                 402073 01-05-17
        2         1        26   1048576         1 NO  INACTIVE                341765 01-02-25
        3         1        27   1048576         1 NO  INACTIVE                361872 01-04-17
        4         1        28   1048576         1 NO  INACTIVE                381973 01-05-15

SQL> col MEMBER format A50
SQL> select * from V$LOGFILE;

   GROUP# STATUS  MEMBER
--------- ------- --------------------------------------------------
        1         D:\ORACLE\ORADATA\ORA8\REDO04.LOG
        2 STALE   D:\ORACLE\ORADATA\ORA8\REDO03.LOG
        3 STALE   D:\ORACLE\ORADATA\ORA8\REDO02.LOG
        4 STALE   D:\ORACLE\ORADATA\ORA8\REDO01.LOG
		

●V$LOGのSTATUS列
状態
UNUSED データが書き込まれていないREDOロググループ(新規追加直後)
CURRENT 現行のREDOロググループ
ACTIVE インスタンス回復時に必要なREDOロググループ
INACTIVE インスタンス回復時に不要なREDOロググループ
CLEARING ログは空きログとして現在再作成中
CLEARING_CURRENT 現在のログファイルは閉じたスレッドを消去中

●V$LOGFILEのSTATUS列
状態
NULL(空白) 使用中のメンバ
INVALID アクセス不能なメンバ
STALE ファイルの内容が不完全なメンバ
DELETED 使用されていないメンバ

●FIRST_START_IO_TARGET パラメータ
クラッシュ、またはインスタンス回復時に必要なI/O数を指定することにより、回復時間を早める。 Oracle8iから導入された。


オンラインREDOログのアーカイブ

Oracleでは、いっぱいになったオンラインREDOログファイルのグループを「アーカイブREDOログ」として、1つ以上のオフライン接続先に保存できる。
アーカイブ操作は、バックグラウンドプロセスARCnによって自動化できる。

●データベース・アーカイブモードの選択
モード 状態 メリット/デメリット
NOARCHIVELOG オンラインREDOログのアーカイブは禁止になる。
ログスイッチが発生すると、アクティブでなくなったロググループはLGWRで再利用できるようになる。
×管理作業が増える
×メディア障害が起きた場合、最後にバックアップをとった時以降のトランザクションをリカバリできない
×オンライン表領域のバックアップを実行できない
ARCHIVELOG オンラインREDOログのアーカイブが使用可能になる。
いっぱいになったロググループがアーカイブされるまでは、LGWRで再利用できなくなる。
○メディア障害が起きた場合でも、全てのコミットされたトランザクションをリカバリできる
○DBのオープン中に、作成されたバックアップを通常通りシステムで使用できる
○REDOログをスタンバイ・データベースに適用することによって、スタンバイをオリジナルDBと共に最新の状態に保てる

●データベース・アーカイブ・モードの変更
ALTER DATABASE ARCHIVELOG/NOARCHIVELOG;

※モード変更時の手順

  1. インスタンスの停止
  2. データベースのバックアップの作成(データ保護のため。必須ではない)
  3. データベースをマウント状態で起動する。STARTUP MOUNT;
  4. データベースのアーカイブモードを変更

●自動アーカイブの選択
初期化パラメータの設定 LOG_ARCHIVE_START=TRUE; LOG_ARCHIVE_START=FALSE;
インスタンス起動後 ALTER SYSTEM ARCHIVE LOG START; ALTER SYSTEM ARCHIVE LOG STOP;

※自動アーカイブを可能にした場合

●手動アーカイブの実行
ALTER SYSTEM ARCHIVELOG ALL;


TOP > REDOログファイルのメンテナンス
2001/05/18 担当:K.Y