RDS for Oracleでは"alter system"や"alter database"コマンドの利用が制限されています。そのため、OracleでREDOログを追加するような"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