SPFILE と PFILE (パラメータ・ファイル)
現在、初期化パラメータ を格納するファイルには2つの方式がある。
旧来からの初期化パラメータ・ファイル(PFILE) と Oracle 9i から登場したサーバー・パラメータ・ファイル(SPFILE) である。
特徴 | 初期化パラメータ・ファイル | サーバー・パラメータ・ファイル |
ファイル形式 | テキスト形式 | バイナリ形式 |
編集方法 | エディタによる編集 | ALTER SYSTEM SET 〜 SCOPE={BOTH|SPFILE} |
編集内容の反映タイミング | 再起動時 | 即座・次セッション(遅延)・再起動時 |
ALTER SYSTEM の範囲 | インスタンス(※1) | インスタンス・データベース |
(※1) インスタンスとはメモリ上だけの設定変更で、再起動すると初期化パラメータの内容が戻ることをあらわす。
SPFILE の特徴(長所、短所)
- 初期化パラメータの変更インターフェイスが集約された
- パラメータファイルの位置が 動的パフォーマンス・ビュー に格納されるようになった。(※2)
- 初期化パラメータに誤った設定をするとコマンドで編集できなくなることある。(※3)
(※2) 初期化パラメータ・ファイルによる運用では PFILE の位置はデータベースに保存されていない。
STARTUP 時 PFILE 指定して起動した場合、インスタンス情報からはファイル位置は取得できない。
( PFILE が複数バージョンある場合や無停止運用の場合、引継ぎや移行の際に現在の設定を紛失する可能性がある)
起動スクリプトで運用していてもバックアップ用の PFILE の格納場所の隔離やファイル名のルールを作って運用することをお勧めする。
SPFILE の場合、ファイル情報はパフォーマンスビューに保管されている。
現在使用しているサーバーパラメータファイルは SQLPlus または v$parameter ビューで確認できる。PFILE経由の指定でもSPFILE=file_pathで指定したファイル情報を保持している。
SQL> SHOW PARAMETER SPFILE
or
SQL> SELECT VALUE FROM V$PARAMETER WHERE NAME = 'spfile' ;
(※3) 初期化パラメータに誤った設定を行なうと再起動時にマウントができないことがあり、サーバー・パラメータ・ファイルを編集できなくなる (ALTER SYSTEM コマンドが実行できない)。
CREATE PFILE FROM SPFILE を使用して修復する。⇒ サーバー・パラメータ・ファイル (Tips)
SPFILE と PFILE の優先順位と探索順
SPFILE は以下のディレクトリとファイルを順に探索する。
SPFILE を発見できなかった場合には パラメータファイル( PFILE ) を探索する。
ファイルを見つけたら以降の優先順位の低いファイルが存在しても読み込まない。
STARTUP コマンドに指定できるパラメータファイルオプションは PFILE のみである。
⇒ SPFILE を特定の場所に配置したい場合には…
サーバー・パラメータ・ファイル (spfileDB_NAME.ora ? ファイル) 探索順
- OS ファイルシステム使用時 $ORACLE_HOME/dbs (Windows の場合 $ORACLE_HOME/database (※))
- spfileORACLE_SID.ora
- spfile.ora
- initORACLE_SID.ora
- RAW デバイス使用時 データ・ファイルが格納されている位置(未検証)
- spfileORACLE_SID.ora
- spfile.ora
- initORACLE_SID.ora
(※要注意) Windows 版 Oracle 10.2 付近?の DBCA では $ORACLE_HOME/database に SPFILE の所在を記した初期化パラメータファイルのみが配置され、探索対象外の $ORACLE_HOME/dbs に SPFILE が配置されるようになっている。
事実上、DBCA を使うと初期化パラメータファイルがサーバー・パラメータファイルより優先的に読み込むコンフィグレーションとなっていることになる。(ファイルの位置を UNIX 系に統一するための布石かも?)
しかし 困ったことに初期化パラメータファイルを改名や削除すると 〜/dbs に移動された SPFILE を探索するような調整はされていないため…… 以下のように起動できない状態の環境になってしまう。その点についてはしっかり記憶に留めておく必要がありそう。以前のように create pfile from spfile、create spfile from pfile を実行すると初期化パラメータファイルは上書きされて内容がわからなくなり SPFILE も複数に散在し高確率で混乱を招く環境になる。
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: ...'C:\ORACLE\...\DATABASE\INITTEST.ORA' ...