REDOログ・ファイルは、データベースに対するすべての変更情報を記録しており、データベースに障害が発生した場合に、データ・ファイルを最新の状態に復元すために使用される。
インスタンス回復にはREDOログファイルが必要。
ディスク障害に対応するため、REDOロググループ内の各メンバはそれぞれ別のハードディスクに配置するのが望ましい。
よって、3つのログファイルメンバを持つグループの場合、ディスクは3つ用意するのが理想。(ディスクI/Oの競合も減る)
●Oracleサーバは全てのデータ変更をREDOログバッファ(メモリ)に記録し、以下のタイミングで現行のREDOロググループに書き込む。
●ログスイッチ
●チェックポイント
●チェックポイントが発生したときの処理
※チェックポイントは、ログスイッチ発生時以外でも
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オプションは使用できない。
※ALTER DATABASE文ではREDOログファイルを改名してもファイル内のポインタが変わるだけで、OSファイルが物理的に移動・改名することはない。
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;
※Oracle8iからは、現行グループでなければOPEN時でも行なえる。
※ALTER DATABASE文でREDOロググループを削除しても、OSファイルが物理的に削除されることはない。
4.REDOロググループの削除 ALTER DATABASE [データベース名]
DROP LOGFILE [GROUP グループ番号] ('ファイル名', 'ファイル名',...);例)ALTER DATABASE db1 DROP LOGFILE GROUP 10;
※ALTER DATABASE文でREDOログメンバを削除しても、OSファイルが物理的に削除されることはない。
5.REDOログメンバの削除 ALTER DATABASE [データベース名]
DROP LOGFILE MEMBER
['ファイル名' [REUSE], 'ファイル名' [REUSE],...];例)アクティブグループからメンバを削除する
ALTER SYSTEM SWITCH LOGFILE; <--- 強制的にログスイッチを発生させる
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log2b.rdo';
※REDOログファイルの初期化は、削除/追加と同じ動作であるが、アーカイブされていない場合など削除できない場合に使用すると便利である。
6.REDOログファイルの初期化 ALTER DATABASE [データベース名]
CLEAR [UNARCHIVED] LOGFILE [GROUP グループ番号] ('ファイル名', 'ファイル名',...);
●次の場合、REDOロググループの削除はできない
●次の場合、REDOログメンバの削除はできない
動的データディクショナリの検索 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から導入された。
Oracleでは、いっぱいになったオンラインREDOログファイルのグループを「アーカイブREDOログ」として、1つ以上のオフライン接続先に保存できる。
アーカイブ操作は、バックグラウンドプロセスARCnによって自動化できる。
●データベース・アーカイブモードの選択 モード 状態 メリット/デメリット NOARCHIVELOG オンラインREDOログのアーカイブは禁止になる。
ログスイッチが発生すると、アクティブでなくなったロググループはLGWRで再利用できるようになる。×管理作業が増える
×メディア障害が起きた場合、最後にバックアップをとった時以降のトランザクションをリカバリできない
×オンライン表領域のバックアップを実行できないARCHIVELOG オンラインREDOログのアーカイブが使用可能になる。
いっぱいになったロググループがアーカイブされるまでは、LGWRで再利用できなくなる。○メディア障害が起きた場合でも、全てのコミットされたトランザクションをリカバリできる
○DBのオープン中に、作成されたバックアップを通常通りシステムで使用できる
○REDOログをスタンバイ・データベースに適用することによって、スタンバイをオリジナルDBと共に最新の状態に保てる
●データベース・アーカイブ・モードの変更 ALTER DATABASE ARCHIVELOG/NOARCHIVELOG; ※モード変更時の手順
- インスタンスの停止
- データベースのバックアップの作成(データ保護のため。必須ではない)
- データベースをマウント状態で起動する。STARTUP MOUNT;
- データベースのアーカイブモードを変更
●自動アーカイブの選択 初期化パラメータの設定 LOG_ARCHIVE_START=TRUE; LOG_ARCHIVE_START=FALSE; インスタンス起動後 ALTER SYSTEM ARCHIVE LOG START; ALTER SYSTEM ARCHIVE LOG STOP; ※自動アーカイブを可能にした場合
- アーカイブREDOログのアーカイブ先とファイル名の形式を指定する必要がある。
- 手動アーカイブも可能
- (注意)データベースもARCHIVELOGモードでないと自動的にアーカイブ出来ない
●手動アーカイブの実行 ALTER SYSTEM ARCHIVELOG ALL;