対応バージョン

Oracle Database 10.1 – 12.1

更新履歴

日付更新概要
2015/01/31記事公開
2015/03/16記事を概要と操作に分割
2016/05/22記事の言い回しを修正

REDOログのグループの追加や削除(再作成)の操作について記載します。
REDOログのアーキテクチャ・概要については以下を参照して下さい。
REDOログ概要

ログスイッチ

以下のコマンドにより、ログスイッチが行われ、REDOログの循環(切り替え)が行われます。
データファイルのバックアップ後からのデータ状態をアーカイブログとして保存し、データベースリカバリなどに使用されます。

# su - oracle
$ sqlplus / as sysdba
SQL> set pagesize 10000 line 120 trim on
SQL> column MEMBER format a100
SQL> -- 現在のログの確認
SQL> select THREAD#,GROUP#,SEQUENCE#,BYTES from v$log order by THREAD#,GROUP#;
SQL> -- ログインしているインスタンスのログスイッチを行う場合
SQL> alter system switch logfile;
SQL> -- RAC 全体のログスイッチを行う場合( NOARCIVELOG モードでは不可 / ORA-00258 が発生する)
SQL> alter system archive log current;
SQL> -- ログスイッチ後のログの確認
SQL> select THREAD#,GROUP#,SEQUENCE#,BYTES from v$log order by THREAD#,GROUP#;

各THREAD#についてログスイッチが行われ、SEQUENCE#が進んでいることが確認できます。

REDOログの追加

グループを追加する

例として/u01/app/oracle/oradata/ORCL/onlinelog/testredo1.log(testredo2.log)を以下の条件で追加するコマンドを記載します。

  1. スレッド1(RACのインスタンス番号、シングルインスタンスの場合は1固定となります)
  2. グループ番号4
  3. 2メンバー(testredo1.logとtestredo2.logはコピーとなり、全く同じデータとなります)
  4. 50MB
SQL> select THREAD#,GROUP#,SEQUENCE#,BYTES/1024/1024 MBYTES from v$log order by THREAD#,GROUP#;
SQL> select GROUP#,MEMBER from v$logfile order by GROUP#,MEMBER;
SQL> alter database add logfile
   2 thread 1
   3 group 4
   4 ('/u01/app/oracle/oradata/ORCL/onlinelog/testredo1.log',
   5 '/u01/app/oracle/oradata/ORCL/onlinelog/testredo2.log')
   6 SIZE 50M;

SQL> -- グループが追加されていることを確認する。
SQL> select THREAD#,GROUP#,SEQUENCE#,BYTES/1024/1024 MBYTES from v$log order by THREAD#,GROUP#;
SQL> -- 指定した名前(ファイル)のグループメンバーが追加されていることを確認する。
SQL> select GROUP#,MEMBER from v$logfile order by GROUP#,MEMBER;
SQL> -- 実際のファイルを確認する。
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[12].log

グループにメンバーを追加する

冗長化を行うため、グループにメンバーを追加します。

先ほどの例で追加したグループ4に、3つ目と4つ目のメンバーを追加します。(/u01/app/oracle/oradata/ORCL/onlinelog/testredo3.log(testredo4.log))
グループ4としてサイズが確保されているため、サイズの指定はありません。グループ4の他のメンバーのコピーとなるため、同じサイズになります。

SQL> select THREAD#,GROUP#,SEQUENCE#,BYTES/1024/1024 MBYTES from v$log order by THREAD#,GROUP#;
SQL> select GROUP#,MEMBER from v$logfile order by GROUP#,MEMBER;
SQL> alter database add logfile
   2 MEMBER '/u01/app/oracle/oradata/ORCL/onlinelog/testredo3.log',
   3 '/u01/app/oracle/oradata/ORCL/onlinelog/testredo4.log'
   4 to group 4;

SQL> -- 指定したファイル名 (MEMBER 列) が追加されていることを確認する。
SQL> select GROUP#,MEMBER from v$logfile order by GROUP#,MEMBER;
SQL> -- 実際のファイルを確認する。
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log

REDOログの削除

REDOログ・ファイルの状態が使用可能(INACTIVE/UNUSED)の場合、削除が可能となります。使用中(CURRENT/ACTIVE)の間は削除出来ません。REDOログ・ファイルの循環によってステータスが変化します。REDOログ・ファイルの循環ついてはREDOログ概要を参照してください。

通常時にみるステータスは以下の通りです。アーカイブ・ログ化されているかどうかはステータスに関連ありません。

  • ・ACTIVE(データファイルに書き込みが終わっていない状態)
  • ・CURRENT(現在使用中)
  • ・INACTIVE(データファイルに書き込みが終わった状態)
  • ・UNUSED(まだ未使用の状態)

以下は上記のREDOログの追加にて作成した、グループ4(/u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log)を削除する例です。
まずステータスを削除可能な状態に変更します。

SQL> -- OMF (Oracle Managed File) のみ実ファイルが削除されるため、必ず実ファイルが消えたか確認しておく
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log
SQL> -- 削除対象のログのステータスが INACTIVE であることを確認します。
SQL> select THREAD#,GROUP#,SEQUENCE#,STATUS from v$log order by THREAD#,GROUP#;
SQL> -- 削除対象が CURRENT だった場合、 CURRENT となるログのグループを移動します。
SQL> alter system archive log current; -- RAC 全体でスイッチを行う場合
SQL> alter system switch logfile; -- 現在のインスタンスの REDO ログをスイッチする場合

SQL> -- データファイルへの書き込みを行い、CURRENT 以外を INACTIVE にします。
SQL> alter system checkpoint;

SQL> -- 削除対象のログのステータスが INACTIVE であることを再度確認します。
SQL> select THREAD#,GROUP#,SEQUENCE#,STATUS from v$log order by THREAD#,GROUP#;

グループのメンバーを削除する

ステータスを削除可能に変更した後に以下のSQL文を実行します。

SQL> -- メンバーの削除を行う場合
SQL> alter database drop logfile member
  2 '/u01/app/oracle/oradata/ORCL/onlinelog/testredo1.log',
  3 '/u01/app/oracle/oradata/ORCL/onlinelog/testredo2.log';

SQL> -- メンバーが消えていることを確認します。
SQL> select GROUP#,MEMBER from v$logfile order by GROUP#,MEMBER;
SQL> -- 実際のファイルも削除します。
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log
SQL> host rm -i /u01/app/oracle/oradata/ORCL/onlinelog/testredo[12].log
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log

グループを削除する

こちらもステータスを削除可能に変更した後に以下のSQL文を実行します。

SQL> -- グループの削除を行う場合
SQL> alter database drop logfile group 4;

SQL> -- グループが消えていることを確認します。
SQL> select THREAD#,GROUP#,SEQUENCE#,STATUS from v$log order by THREAD#,GROUP#;
SQL> select GROUP#,MEMBER from v$logfile order by GROUP#,MEMBER;
SQL> -- 実際のファイルも削除します。
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log
SQL> host rm -i /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log
SQL> host ls -lh /u01/app/oracle/oradata/ORCL/onlinelog/testredo[1-4].log

REDOログの再作成

REDOログの再作成は上記の追加と削除を組み合わせて行います。
直接再作成を行うコマンドはありません。