現状確認
v$logとv$logfileで現状を確認する
select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status from v$log t order by t.GROUP#,t.THREAD# ;
select group#, member from v$logfile order by 1,2 ;
実行サンプル
v$logを見る事で現在カレント(現在ログ書込み対象)がどのグループなのかわかります。デフォルトでは3グループでローテーションされて利用されています。
次にv$logfileを見る事でログを書きこむ具体的なファイル名がわかります。通常1グループ複数メンバー(デフォルトでは2つ)で構成されています。とても重要なファイルなので同じデータを同時に2ファイルに書き込むようになっています。以下の例は、デフォルトのままなのでファイル名もいまいちわかり辛いものになっていますが、これを機に改めます。
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2 from v$log t order by t.GROUP#,t.THREAD#
3 ;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2155 50 2 INACTIVE
2 1 2156 50 2 INACTIVE
3 1 2157 50 2 CURRENT
SQL>
SQL> select group#, member from v$logfile order by 1,2
2 ;
GROUP# MEMBER
_________ ___________________________________________________________________________
1 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_1_hw3oh9n1_.log
1 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_1_hw3oh9dt_.log
2 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_2_hw3ohg71_.log
2 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_2_hw3ohfx5_.log
3 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_3_hw3ohh0q_.log
3 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_3_hw3ohgv7_.log
6行が選択されました。
SQL>
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2 from v$log t order by t.GROUP#,t.THREAD#
3 ;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2155 50 2 INACTIVE
2 1 2156 50 2 INACTIVE
3 1 2157 50 2 CURRENT
SQL>
SQL> select group#, member from v$logfile order by 1,2
2 ;
GROUP# MEMBER
_________ ___________________________________________________________________________
1 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_1_hw3oh9n1_.log
1 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_1_hw3oh9dt_.log
2 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_2_hw3ohg71_.log
2 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_2_hw3ohfx5_.log
3 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_3_hw3ohh0q_.log
3 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_3_hw3ohgv7_.log
6行が選択されました。
SQL>
作業要件と概要
上記の通り現状は50M×3グループで運用していますが、今回の作業で300M×4グループの運用に変更します。
- 4番目のREDOログの作成
- 4番目REDOログまでログスイッチしてCURRENTになる事を確認
- 既存REDOログの再作成(1~3番目のREDOログを全て行う)
4番目のREDOログの作成
alter database add logfile group 4 ('/usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/redo04.log' , '/usr/oracle/app/oradata/ORAU8/onlinelog/redo04.log') size 300M ;
-- 確認します。
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2 from v$log t order by t.GROUP#,t.THREAD#
3 ;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2155 50 2 INACTIVE
2 1 2156 50 2 INACTIVE
3 1 2157 50 2 CURRENT
4 1 0 300 2 UNUSED
SQL> select group#, member from v$logfile order by 1,2
2 ;
GROUP# MEMBER
_________ ___________________________________________________________________________
1 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_1_hw3oh9n1_.log
1 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_1_hw3oh9dt_.log
2 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_2_hw3ohg71_.log
2 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_2_hw3ohfx5_.log
3 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/o1_mf_3_hw3ohh0q_.log
3 /usr/oracle/app/oradata/ORAU8/onlinelog/o1_mf_3_hw3ohgv7_.log
4 /usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/redo04.log
4 /usr/oracle/app/oradata/ORAU8/onlinelog/redo04.log
8行が選択されました。
SQL>
4番目REDOログまでログスイッチしてCURRENTになる事を確認
ログスイッチをするDDL
alter system switch logfiles ;
ログステータスをINACTIVEにするための checkpoint
alter system checkpoint ;
ログスイッチをするSQL
SQL> alter system switch logfile
2 ;
System SWITCHが変更されました。
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2 from v$log t order by t.GROUP#,t.THREAD#
3 ;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2155 50 2 INACTIVE
2 1 2156 50 2 INACTIVE
3 1 2157 50 2 ACTIVE <--INACTIVEでないと削除できない
4 1 2158 300 2 CURRENT
-- 待っていればINACTIVEになるはずですが、自分でcheckpointすれば直ぐに切り替わります。
SQL> alter system checkpoint
2 ;
System CHECKPOINTが変更されました。
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2 from v$log t order by t.GROUP#,t.THREAD#
3 ;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2155 50 2 INACTIVE
2 1 2156 50 2 INACTIVE
3 1 2157 50 2 INACTIVE
4 1 2158 300 2 CURRENT
SQL>
既存REDOログの再作成(1~3番目のREDOログを全て行う)
既存のREDOログを削除するDDL
alter database drop logfile group 1 ;
SQL> alter database drop logfile group 1
2 ;
データベースが変更されました。
-- 4番目のREDOログを作成した時と同様に既存のREDOログファイルを300Mで作成する
SQL> alter database add logfile group 1
2 ('/usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/redo01.log' , '/usr/oracle/app/oradata/ORAU8/onlinelog/redo01.log') size 300Malter database add logfile group 1
3 ('/usr/oracle/app/fast_recovery_area/ORAU8/onlinelog/redo01.log' , '/usr/oracle/app/oradata/ORAU8/onlinelog/redo01.log') size 300M
4 ;
データベースが変更されました。
SQL> alter system checkpoint
2 ;
-- 2番目、3番目も同様に実施
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2 from v$log t order by t.GROUP#,t.THREAD#
3 ;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2159 300 2 CURRENT
2 1 0 300 2 UNUSED
3 1 0 300 2 UNUSED
4 1 2158 300 2 INACTIVE
SQL> alter system switch logfile
2 ;
SQL> alter system switch logfile
2 ;
SQL> alter system checkpoint
2 ;
System CHECKPOINTが変更されました。
SQL> select group#, thread#, sequence#, bytes/1024/1024 M_bytes, members, status
2* from v$log t order by t.GROUP#,t.THREAD#;
GROUP# THREAD# SEQUENCE# M_BYTES MEMBERS STATUS
_________ __________ ____________ __________ __________ ___________
1 1 2159 300 2 INACTIVE
2 1 2160 300 2 INACTIVE
3 1 2161 300 2 INACTIVE
4 1 2162 300 2 CURRENT
SQL>