RDS for OracleでREDOログファイルの追加方法
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