Oracleの制御ファイルやアーカイブファイルの場所を変更する

ここ数週間はOracleをいじることが多いです。旧環境からデータファイルなどを移行したときに割と適当にpfileやcreate databaseをやったので、妙なディレクトリに制御ファイルとアーカイブファイルの場所を指定してしまった模様。変更します。

現在の値を確認する。

DBをopenまであげて、systemで接続。show parameterで値を確認する。

$ sqlplus system/manager as sysdba 
SQL> show parameter control_files ;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
control_files			     string	 /mnt/db/oracle/oradata/hogehog
						 /control1/control1.ctl, /mnt/d
						 b/oracle/oradata/cyhope1/contr
						 ol1/control2.ctl, /mnt/db/orac
						 le/oradata/hogehog/control1/co
						 ntrol3.ctl
SQL> 

アーカイブファイルの置き場なんかは control_files のところを db_recovery_file_dest にすればOK。
spfileを作るもとにしたpfileがあればそれを参照するのもいいけど、show parameterを叩くのが確実。

spfileを変更する

コントロールファイルの場合。

SQL> alter system set controlfiles='/path/to/anyware/control01.ctl','/path/to/somewhre/control02.ctl' scope=spfile ;

アーカイブファイルの場合

SQL> alter system set db_recovery_file_dest='/path/to/nowhere/arch' scope=spfile ;

Oracleをシャットダウンする

SQL> shutdown immediate ;

設定した値をファイルシステム上で実現させる。

コントロールファイルの位置を変えた場合は変えた先へmvする。アーカイブファイルのディレクトリを変更した場合は、変更先をmkdirしておく。

DBをOpenする。

SQL> startup

元の場所は消しときましょう。運用しているうちになんで二箇所あるんだとか、このファイル日付変わってないけどいるのかなぁってことになってしまいます。というかなりました。