REDOログファイルのサイズ変更方法

色々調べたが、既存のREDOログファイルのサイズを変更することはできないみたい。
REDOログファイルのサイズを変更するには、下記手順を踏まないといけない。

  1. 既存のREDOロググループを削除
  2. 新しいREDOロググループを作成
  3. REDOロググループの数だけ1,2を繰り返す。

1.既存のREDOロググループを削除

現状のログファイルサイズ確認

SQL> COL MEMBER FORMAT A55
SQL> COL STATUS FORMAT A10
SQL> 
SQL> SELECT LOG.GROUP#,
  2      LOG.BYTES/1024/1024 AS MBYTES,
  3      LOG.STATUS,
  4      LOGFILE.MEMBER 
  5  FROM   V$LOG LOG,
  6      V$LOGFILE LOGFILE
  7  WHERE LOG.GROUP# = LOGFILE.GROUP#;

    GROUP#     MBYTES STATUS     MEMBER
---------- ---------- ---------- -------------------------------------------------------
         3         50 CURRENT    D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG
         2         50 INACTIVE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG
         1         50 INACTIVE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG

3つグループがあってすべて50MB。
STATUSがINACTIVEのグループだけ削除可能。*1
INACTIVEのグループ番号を指定して削除。

SQL> alter database drop logfile group 1;
データベースが変更されました。

グループ2も削除したいところだが、REDOロググループは最低2グループ必要なのでグループ1を再作成してから削除することに。
削除完了。OS上にはファイルが残っているので物理削除しておく。

    GROUP#     MBYTES STATUS     MEMBER
---------- ---------- ---------- -------------------------------------------------------
         3         50 CURRENT    D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG
         2         50 INACTIVE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG

2.新しいREDOロググループを作成

新しいグループを作成する。このときサイズを指定する。

SQL> ALTER DATABASE ADD LOGFILE GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01_1.LOG' SIZE 4M;
データベースが変更されました。

最初1Mを指定したらエラーとなった。恐らくブロックサイズ以下の値は指定できないのだろう。*2
確認すると追加されている。

    GROUP#     MBYTES STATUS     MEMBER
---------- ---------- ---------- -------------------------------------------------------
         3         50 CURRENT    D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG
         2         50 INACTIVE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG
         1         4  UNUSED     D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01_1.LOG

これでサイズの変更完了。
あとは2,3のグループに対してもこれを繰り返す。*3

今回は処理がとまっているときに行ったが、実際の業務中でも手早くやればそんなに危険はない。ハズ。

*1:もし、INACTIVEのグループなければチェックポイントを強制的に発行する。ALTER SYSTEM CHECKPOINT;

*2:既にOS上に存在するファイル名を指定する場合は、最後に「REUSE」をつける。

*3:STATUSをCURRENTから変更する場合はALTER SYSTEM SWITCH LOGFILEを発行