制御ファイルの多重化

制御ファイルの多重化

今回は制御ファイルの多重化の手順を紹介します。
制御ファイルとはOracleデータベースの物理的な構造の情報を永続化しているファイルなのだが、このファイルが壊れたり削除されたりするとデータベースがマウントできなくなってしまうため、一般的には制御ファイルを追加してミラーリングを行います。
制御ファイルを追加する手順としてオンラインドキュメントには概ね以下のように記載されているのですが、リリース10gのデフォルトの設定(DBCAを使った場合)ではこの手順が通用しません。
  1. データベースを停止
  2. 制御ファイルをコピー
  3. 初期化パラメータファイルのcontrol_filesパラメータを編集
  4. データベースを再起動
3番目に「初期化パラメータファイルのcontrol_filesパラメータを編集」とありますが、リリース10gのデフォルトの設定では初期化パラメータファイルではなく、サーバーパラメータファイルを使用するようになっています。

ファイル名特徴
初期化パラメータファイルテキスト形式のファイルで直接編集可能
サーバーパラメータファイルバイナリ形式で編集はSQLで行う

というわけで、サーバーパラメータファイルの編集にはSQLを使います。
SQLを使って編集するのに手順1番目で「データベースを停止」とある
ので上の手順通りにはいかないのです。
という訳で今回は、サーバーパラメータファイルを使用しているデータベースでの手順を紹介します。

[環境]
OSMicrosoft Windows XP Professional SP2
DBOracle Database 10g Release 10.2.0.1.0

それではさくさくと手順を紹介していきます。
手順はSYSDBA権限を所有しているユーザで実行してください。

[制御ファイルの追加手順]
1.パラメータの確認
V$PARAMETERに問い合わせてcontrol_filesパラメータの値を確認します。
SQL> SELECT VALUE FROM V$PARAMETER WHERE NAME='control_files';
複数ファイルが指定されている場合はvalue列の値がカンマ区切りで設定されています。
おらの環境では既に3つに制御ファイルがミラーリングされていました。
VALUE
----------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL01.CTL,
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL02.CTL,
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL03.CTL
後でcontrol_filesパラメータの値を上書きする時に既存の値も使うため、ここで確認した値はコピー&ペーストして別のエディタ等にとっておくとよいでしょう。

2.パラメータを編集
パラメータの値を編集するにはALTER SYSTEM文を使います。
ALTER SYSTEM文の構文はこちらのドキュメントを参考に。
  • Oracle Database SQLリファレンス10g リリース2(10.2)より
    http://otndnld.oracle.co.jp/document/products/orac...
    ※参照するにはotnのユーザ登録が必要です。

さっそく発行してみましょう。
今回は「C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL04.CTL」というパスで制御ファイルを追加します。
SQL> ALTER SYSTEM SET
    2  control_files='C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL01.CTL',
    3  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL02.CTL',
    4  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL03.CTL',
    5  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL04.CTL'
    6  SCOPE=SPFILE;
注意しなければいけないのは、各制御ファイルのパスごとにシングルクォーテーション(')でパスを囲む必要があることです。
'制御ファイルのパス1', '制御ファイルのパス2'
また、SCOPE句にはSPFILEと指定します。
SCOPE句には、ALTER SYSTEM文での変更の反映先を指定します。
SPFILEって何の事でしたっけ?そう、サーバーパラメータファイルの事です。
よってこのALTER SYSTEM文での変更の反映先はサーバーパラメータファイルですって事をSCOPE句で指定しています。
すなわち、このALTER SYSTEM文では、サーバーパラメータファイルのcontrol_filesパラメータを変更します。
以下にSCOPE句で指定可能なものを一覧にしました。

パラメータ説明
MEMORYデータベースインスタンスに変更を反映
SPFILEサーバーパラメータファイルに変更を反映
BOTHインスタンスとサーバーパラメータファイルの両方に変更を反映

ちなみにcontrol_filesパラメータは静的なパラメータなので、SCOPE句にMEMORYを指定する事は出来ません。

3.データベースを停止
編集したサーバーパラメータファイルの内容をデータベースインスタンスに反映させるには再起動が必要です。
また、制御ファイルのコピーもデータベースが停止している状態で行う必要があるため、一旦データベースを停止します。
SQL> SHUTDOWN IMMEDIATE
4.制御ファイルのコピー
既存の制御ファイルを「C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL04.CTL」にコピーします。
データベースがオープンしている間は、常に制御ファイルに書き込みを行っているためオープンしている時にコピーすると制御ファイル間の整合性がとれなくなってしまいます。
制御ファイルのコピーは必ずデータベースを停止してから行いましょう。
5.データベースを再起動
サーバパラメータファイルの内容をデータベースインスタンスに反映させるためにデータベースを再起動します。

SQL> STARTUP
6.反映の確認
それでは、データベースインスタンスに反映されたか確認しましょう。
確認はV$CONTROLFILEに問い合わせて行います。
SQL> SELECT NAME FROM V$CONTROLFILE;
結果はこんな感じ。
NAME
----------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL01.CTL
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL02.CTL
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL03.CTL
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL04.CTL
今回追加した「C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL04.CTL」が表示されているのが確認出来ましたね。

以上で制御ファイルの追加は完了です。
今までの手順を初期化パラメータファイル環境の手順と比較出来るようにまとめてみました。

順序初期化パラメータファイル環境サーバーパラメータファイル環境
データベースを停止サーバーパラメータファイルを編集
制御ファイルをコピーデータベースを停止
初期化パラメータファイルを編集制御ファイルをコピー
データベースを再起動データベースを再起動

どちらの環境でもデータベースの停止が必要なところは同です。
ただ、パラメータファイル編集のタイミングが異なるようです。
2006年07月26日(水) 23:58:05 Modified by mr_makochi




スマートフォン版で見る