MAKOCHI'S DATABASE

Oracle関連の記事を投稿しています。

Oracle Database

すべて表示

制御ファイルの多重化

今回は制御ファイルの追加手順を解説します。

10gのデフォルトの設定では、サーバパラメータファイル(SPFILE)を使用するようになっており、マニュアル等で見かける初期化パラメータファイル(PFILE)の編集による方法では、制御ファイルを追加する事が出来ません。
よって、ここではSPFILEを使用している環境での制御ファイルの追加手順を解説します。

ちなみに、マニュアル等でよく見かける、PFILE環境での制御ファイルの追加手順は以下の通りです。
(今回こちらは解説しません)

 1.データベースを停止
 2.OSコマンドで制御ファイルをコピー
 3.初期化パラメータファイルのCONTROL_FILESパラメータを編集
 4.データベースを再起動

SPFILEはバイナリファイル形式なので、手順3のCONTROL_FILESパラメータの編集をファイルから直接行う事は出来ないため、SPFILE環境では、上記の方法では制御ファイルの追加が出来ません。

それでは、これからSPFILEを使用している環境での制御ファイルの追加手順の解説します。

■環境
DB:Release Oracle Database 10g Release 10.2.0.1.0
OS:Microsoft Windows XP Professional SP2

■制御ファイルの追加手順
1.CONTROL_FILESパラメータの確認
V$PARAMETERに問い合わせてCONTROL_FILESパラメータの値を確認します。

 SELECT NAME, VALUE FROM V$PARAMETER
 WHERE NAME='control_files';

NAME      VALUE
−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
control_files  C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL01.CTL,C:\ORACLE\
          PRODUCT\10.2.0\ORADATA\GOLD\CONTROL02.CTL

VALUE列の値が制御ファイルの場所になります。多重化されている場合は、カンマ区切りで設定されています。
私の環境では以下の2つでした。

C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL01.CTL
C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL02.CTL

後でCONTROL_FILESパラメータの値を上書きする時に既存の値も使うため、ここで確認した値はコピー&ペーストして別のエディタ等にとっておくとよいでしょう。

2.CONTROL_FILESパラメータを編集
ALTER SYSTEM文でCONTROL_FILESパラメータを変更します。

 ALTER SYSTEM SET CONTROL_FILES='制御ファイルのパス'[, '制御ファイルのパス', ...]
 SCOPE=SPFILE

CONTROL_FILESパラメータは動的に編集が出来ないため、SCOPEにはSPFILEを設定して、SPFILEにのみ値が反映されるようにします。
また、制御ファイルのパスは文字列として扱うため、シングルクォーテーション(')で囲みます。
複数制御ファイルのパスを設定する場合は、1つの制御ファイルのパス毎にシングルクォーテーションで囲むようにします。
例)
'制御ファイル1のパス', '制御ファイル2のパス'

それでは例として「C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL03.CTL」というパスで制御ファイルを1つ追加してみます。

 ALTER SYSTEM SET CONTROL_FILES=
 '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'
 SCOPE=SPFILE;

3.データベースを停止
編集したSPFILEの値をデータベースインスタンスに反映させる為には再起動が必要です。
また、制御ファイルのコピーもデータベースが停止している状態で行う必要があるため、
一旦データベースを停止します。

 shutdown immediate;

4.制御ファイルのコピー
既存の制御ファイルをコピーします。コピー場所にはCONTROL_FILESパラメータの新規に追加した制御ファイルのパスを指定します。

 COPY C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL01.CTL
      C:\ORACLE\PRODUCT\10.2.0\ORADATA\GOLD\CONTROL03.CTL

注:レイアウト上の都合で2行になっていますが、本当は1行のコマンドです。

5.データベースを再起動
SPFILEの値をデータベースインスタンスに反映させるために再起動します。

 startup

6.反映の確認
V$CONTROLFILEに問い合わせデータベースインスタンスの制御ファイルを確認します。
 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\CONTROL03.CTL」が追加されています。

以上で手順は完了です。
今までの手順をPFILE環境と比較出来るようにまとめてみました。

■SPFILE環境
1.サーバパラメータファイルのCONTROL_FILESパラメータを編集
2.データベースを停止
3.OSコマンドで制御ファイルをコピー
4.データベースを再起動

■PFILE環境
1.データベースを停止
2.OSコマンドで制御ファイルをコピー
3.初期化パラメータファイルのCONTROL_FILESパラメータを編集
4.データベースを再起動

どちらの環境もデータベースの再起動が必要なところは同じです。
SPFILE環境はALTER SYSTEM文でCONTROL_FILESパラメータを編集する都合上、パラメータ編集と、データベースの停止のタイミングがPFILE環境とは異なります。


よしもとブログランキング

もっと見る

プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事