対応バージョン
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(RACのインスタンス番号、シングルインスタンスの場合は1固定となります)
- グループ番号4
- 2メンバー(testredo1.logとtestredo2.logはコピーとなり、全く同じデータとなります)
- 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].logREDOログの削除
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].logREDOログの再作成
REDOログの再作成は上記の追加と削除を組み合わせて行います。
直接再作成を行うコマンドはありません。
