oracle

Oracle REDOログファイルグループの追加と既存ログファイルの拡張

現状確認

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グループの運用に変更します。

  1. 4番目のREDOログの作成
  2. 4番目REDOログまでログスイッチしてCURRENTになる事を確認
  3. 既存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>

スポンサーリンク
コピペで使う