REDOログとUNDOレコードの違いについて
2016-06-25
対応バージョン
Oracle Database 10.1 - 12.1
2016-05-22記事の言い回しを修正
2015-03-16記事を概要と操作に分割
2015-01-31記事公開
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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#; |
例として/u01/app/oracle/oradata/ORCL/onlinelog/testredo1.log(testredo2.log)を以下の条件で追加するコマンドを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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の他のメンバーのコピーとなるため、同じサイズになります。
1 2 3 4 5 6 7 8 9 10 11 |
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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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#; |
1 2 3 4 5 6 7 8 9 10 11 |
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 |
1 2 3 4 5 6 7 8 9 10 |
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 |