Oracle その他

既存の REDO ログサイズを変更する方法

すでにデータベースを運用しているけど、後からREDOログのサイズって変更できるのかな?

結論から言うと、既存のREDOログサイズの変更はできないため、新たにREDOロググループを作成し、既存のREDOロググループを削除し入れ替える必要がある。

以下が大まかな流れ。

  1. ロググループ番号 1, 2, 3 がすでに存在していると想定
  2. 新たに 4, 5, 6 グループを作成
  3. グループ 1, 2, 3を削除

新規ロググループの追加

まずは新しいロググループを追加する。

alter database <DB名> add logfile group <番号> '<ファイル名>' size <サイズ>M;

実行例

SQL>  alter database orcl add logfile group 4 '/u01/app/orcl/oradata/orcl/redo04.log' size 100M;

データベースが変更されました。

SQL>  alter database orcl add logfile group 5 '/u01/app/orcl/oradata/orcl/redo05.log' size 100M;

データベースが変更されました。

SQL>  alter database orcl add logfile group 6 '/u01/app/orcl/oradata/orcl/redo06.log' size 100M;

データベースが変更されました。

作成したグループに新しいログメンバーの追加

新しいロググループ 4, 5, 6 にログメンバーを追加する。

alter database <DB名> add logfile member '<ファイル名>' to group <番号>;

実行例

SQL>  alter database add logfile member '/u01/app/orcl/oradata/orcl/redo04_2.log' to group 4;

データベースが変更されました。

SQL>  alter database add logfile member '/u01/app/orcl/oradata/orcl/redo05_2.log' to group 5;

データベースが変更されました。

SQL>  alter database add logfile member '/u01/app/orcl/oradata/orcl/redo06_2.log' to group 6;

データベースが変更されました。

REDOログの状態確認

追加したロググループとメンバーが出力されることを確認する。

set lines 1000
set pages 1000
col member for a50
select l.group#,l.members,f.member, l.sequence#,l.bytes/1024/1024 MB,l.archived,l.status from v$log l,v$logfile f where l.group# = f.group# order by l.group#;

実行例

SQL> set lines 1000
SQL> set pages 1000
SQL> col member for a50
SQL> select l.group#,l.members,f.member, l.sequence#,l.bytes/1024/1024 MB,l.archived,l.status from v$log l,v$logfile f where l.group# = f.group# order by l.group#; 

    GROUP#    MEMBERS MEMBER                                              SEQUENCE#         MB ARC STATUS
---------- ---------- -------------------------------------------------- ---------- ---------- --- ----------------
         1          2 /u01/app/orcl/oradata/orcl/redo01_2.log             235         50 YES INACTIVE
         1          2 /u01/app/orcl/oradata/orcl/redo01.log               235         50 YES INACTIVE
         2          2 /u01/app/orcl/oradata/orcl/redo02.log               236         50 YES INACTIVE
         2          2 /u01/app/orcl/oradata/orcl/redo02_2.log             236         50 YES INACTIVE
         3          2 /u01/app/orcl/oradata/orcl/redo03_2.log             237         50 NO  CURRENT
         3          2 /u01/app/orcl/oradata/orcl/redo03.log               237         50 NO  CURRENT
         4          1 /u01/app/orcl/oradata/orcl/redo04.log                 0        100 YES UNUSED
         5          1 /u01/app/orcl/oradata/orcl/redo05.log                 0        100 YES UNUSED
         6          1 /u01/app/orcl/oradata/orcl/redo06.log                 0        100 YES UNUSED

9行が選択されました。

ログスイッチを実行

追加したロググループが CURRENT となるまでログスイッチを実行する。

alter system switch logfile;

実行例

SQL> alter system switch logfile;

システムが変更されました。

SQL>  select l.group#,l.members,f.member, l.sequence#,l.bytes/1024/1024 MB,l.archived,l.status from v$log l,v$logfile f where l.group# = f.group# order by l.group#;  

    GROUP#    MEMBERS MEMBER                                              SEQUENCE#         MB ARC STATUS
---------- ---------- -------------------------------------------------- ---------- ---------- --- ----------------
         1          2 /u01/app/orcl/oradata/orcl/redo01_2.log             241         50 YES INACTIVE
         1          2 /u01/app/orcl/oradata/orcl/redo01.log               241         50 YES INACTIVE
         2          2 /u01/app/orcl/oradata/orcl/redo02.log               242         50 YES INACTIVE
         2          2 /u01/app/orcl/oradata/orcl/redo02_2.log             242         50 YES INACTIVE
         3          2 /u01/app/orcl/oradata/orcl/redo03_2.log             243         50 YES ACTIVE
         3          2 /u01/app/orcl/oradata/orcl/redo03.log               243         50 YES ACTIVE
         4          1 /u01/app/orcl/oradata/orcl/redo04.log               244        100 YES ACTIVE
         5          1 /u01/app/orcl/oradata/orcl/redo05.log               245        100 NO  CURRENT ★
         6          1 /u01/app/orcl/oradata/orcl/redo06.log               240        100 YES INACTIVE

9行が選択されました。

既存のロググループを削除

古いロググループ 1, 2, 3 を削除していく。

alter database <DB名> drop logfile group <番号>;

実行例

SQL> alter database orcl drop logfile group 1;

データベースが変更されました。

SQL> alter database orcl drop logfile group 2;

データベースが変更されました。

SQL> alter database orcl drop logfile group 3;
alter database orcl drop logfile group 3
*
行1でエラーが発生しました。:
ORA-01624: ログ3はインスタンスorcl(スレッド1)のクラッシュ・リカバリに必要です。 ORA-00312: オンライン・ログ3
スレッド1: '/u01/app/orcl/oradata/orcl/redo03.log'
ORA-00312: オンライン・ログ3 スレッド1: '/u01/app/orcl/oradata/orcl/redo03_2.log'

SQL>  select l.group#,l.members,f.member, l.sequence#,l.bytes/1024/1024 MB,l.archived,l.status from v$log l,v$logfile f where l.group# = f.group# order by l.group#; 

    GROUP#    MEMBERS MEMBER                                              SEQUENCE#         MB ARC STATUS
---------- ---------- -------------------------------------------------- ---------- ---------- --- ----------------
         3          2 /u01/app/orcl/oradata/orcl/redo03.log               243         50 YES ACTIVE ★!!!!
         3          2 /u01/app/orcl/oradata/orcl/redo03_2.log             243         50 YES ACTIVE
         4          1 /u01/app/orcl/oradata/orcl/redo04.log               244        100 YES ACTIVE
         5          1 /u01/app/orcl/oradata/orcl/redo05.log               245        100 NO  CURRENT
         6          1 /u01/app/orcl/oradata/orcl/redo06.log               240        100 YES INACTIVE

エラー発生!?

もし ORA-01624 や ORA-00312 エラーが発生した場合、以下コマンドを使ってステータスを INACTIVE にしよう

alter system checkpoint;

古いロググループが削除されたか確認

前述した REDO ログ状況の確認コマンドを使って、希望通りの状態となっているかを確認する。

実行例

SQL>  select l.group#,l.members,f.member, l.sequence#,l.bytes/1024/1024 MB,l.archived,l.status from v$log l,v$logfile f where l.group# = f.group# order by l.group#; 

    GROUP#    MEMBERS MEMBER                                              SEQUENCE#         MB ARC STATUS
---------- ---------- -------------------------------------------------- ---------- ---------- --- ----------------
         4          2 /u01/app/orcl/oradata/orcl/redo04_2.log             244        100 YES INACTIVE
         4          2 /u01/app/orcl/oradata/orcl/redo04.log               244        100 YES INACTIVE
         5          2 /u01/app/orcl/oradata/orcl/redo05.log               245        100 NO  CURRENT
         5          2 /u01/app/orcl/oradata/orcl/redo05_2.log             245        100 NO  CURRENT
         6          2 /u01/app/orcl/oradata/orcl/redo06.log               240        100 YES INACTIVE
         6          2 /u01/app/orcl/oradata/orcl/redo06_2.log             240        100 YES INACTIVE

この記事が役に立ったという方は
ボタンをポチッとしてくれたら喜びます

-Oracle, その他
-