goodbyegangsterのブログ

備忘録的な

RDS for OracleでREDOログファイルの追加方法

RDS for Oracleでは"alter system"や"alter database"コマンドの利用が制限されています。そのため、OracleREDOログを追加するような"alter database add logfile member"といったコマンドが利用できません。その代わりにRDS用プロシージャが提供されており、それを利用することになります。 以下はREDOログ・ファイルを追加した時のメモです。

とりあえず、該当DBにマスターユーザで接続して初期値を確認。

SQL> select GROUP#, SEQUENCE#, BYTES/1024/1024 as MB, STATUS from V$LOG;

    GROUP#  SEQUENCE#         MB STATUS
---------- ---------- ---------- ----------------
         1      43250        128 ACTIVE
         2      43251        128 ACTIVE
         3      43252        128 CURRENT
         4      43253        128 ACTIVE

RDS for Oracleの初期REDOログ設定は、128MB✕4ファイルになってます。

続いてREDOログファイルの追加。一度作成したREDOログファイルのサイズは変更できないので、「希望サイズのREDOログを必要分作成」してから「不要サイズのREDOログを削除」という手順になります。コマンドはこちら。バージョン11.2.0.4.v1以降だと、p_sizeという引数を利用できます。

SQL> exec rdsadmin.rdsadmin_util.add_logfile(p_size => '256M');

ファイルを10個増加した後、確認。

SQL> select GROUP#, SEQUENCE#, BYTES/1024/1024 as MB, STATUS from V$LOG;

    GROUP#  SEQUENCE#         MB STATUS
---------- ---------- ---------- ----------------
         1      43250        128 ACTIVE
         2      43251        128 ACTIVE
         3      43252        128 ACTIVE
         4      43253        128 CURRENT
         5          0        256 UNUSED
         6          0        256 UNUSED
         7          0        256 UNUSED
         8          0        256 UNUSED
         9          0        256 UNUSED
        10          0        256 UNUSED
        11          0        256 UNUSED

    GROUP#  SEQUENCE#         MB STATUS
---------- ---------- ---------- ----------------
        12          0        256 UNUSED
        13          0        256 UNUSED
        14          0        256 UNUSED

14 rows selected.

で、不要なGROUP#1~4までのREDOログファイルを削除したいのだけど、CURRENTとACTIVEになっているREDOログは削除できません。そのため、ログスイッチとチェックポイントを明示的に実行。

SQL> exec rdsadmin.rdsadmin_util.switch_logfile;

PL/SQL procedure successfully completed.

SQL> exec rdsadmin.rdsadmin_util.checkpoint;

PL/SQL procedure successfully completed.

もう1回確認。

SQL> select GROUP#, SEQUENCE#, BYTES/1024/1024 as MB, STATUS from V$LOG;

    GROUP#  SEQUENCE#         MB STATUS
---------- ---------- ---------- ----------------
         1      43250        128 INACTIVE
         2      43251        128 INACTIVE
         3      43252        128 INACTIVE
         4      43253        128 INACTIVE
         5      43254        256 INACTIVE
         6      43255        256 CURRENT
         7          0        256 UNUSED
         8          0        256 UNUSED
         9          0        256 UNUSED
        10          0        256 UNUSED
        11          0        256 UNUSED

    GROUP#  SEQUENCE#         MB STATUS
---------- ---------- ---------- ----------------
        12          0        256 UNUSED
        13          0        256 UNUSED
        14          0        256 UNUSED

14 rows selected.

削除したいやつらがINACTIVEになっているので、削除処理を実行。引数でGROUP#を指定してあげます。

> exec rdsadmin.rdsadmin_util.drop_logfile(1);

引数を変えて必要RODOログ分繰り返します。で、消えたね。

SQL> select GROUP#, SEQUENCE#, BYTES/1024/1024 as MB, STATUS from V$LOG;

    GROUP#  SEQUENCE#         MB STATUS
---------- ---------- ---------- ----------------
         5      43254        256 INACTIVE
         6      43255        256 CURRENT
         7          0        256 UNUSED
         8          0        256 UNUSED
         9          0        256 UNUSED
        10          0        256 UNUSED
        11          0        256 UNUSED
        12          0        256 UNUSED
        13          0        256 UNUSED
        14          0        256 UNUSED

10 rows selected.

公式の参考ページ。

Oracle DB インスタンスの一般的な DBA ログタスク - Amazon Relational Database Service