SSJ Tech Lab - Oracle Database テクニカルラボ

SPFILEとPFILEの概要と操作

対応バージョン

Oracle Database 10.1 - 11.2

2015-02-11記事公開

SPFILEとPFILEは初期化パラメータを管理するファイルです。
現在PFILEで管理するメリットはありません。SPFILEを使用している場合、PFILEを使用する場面は、RAC環境での共有するSPFILE先の記載や、バックアップとしてPFILEにしておきたい程度の用途になります。

内容、操作方法を理解し、SPFILE管理に移行することを推奨します。

SPFILEとPFILEとは

PFILE

旧来からの管理方式。PFILEと呼ばれるテキストファイルに記載された初期化パラメータを読み込み、インスタンスを起動する。
名称  : 初期化パラメータ・ファイル
配置位置: [ORACLE_HOME]/dbs/init[ORACLE_SID].ora

SPFILE

9iから追加された管理方式。SPFILEと呼ばれるバイナリファイルに記載された初期化パラメータを読み込み、インスタンスを起動する。
名称  : サーバー・パラメータ・ファイル
配置位置: [ORACLE_HOME]/dbs/spfile[ORACLE_SID].ora
      RACかつASMの場合は配置位置が以下のようになります。
      [ディスクグループ]/spfile[DB名].ora

SPFILEとPFILEの違い

テキスト形式とバイナリ形式の違いがあります。
PFILEでの変更反映を確認するには再起動を伴いますが、SPFILEの場合オンラインで変更可能な初期化パラメータはファイルとメモリの変更を同時にできます。
SPFILEの場合のみオンラインでの変更が可能なパラメータがあります。

SPFILEはcreate pfileやv$parameter、v$spparameterによりバイナリファイルの内容を確認することが可能です。
どうしても中の値をテキストとして見たい時はstringsなどのコマンドを使用して確認してください。

SPFILEとPFILEの使用状況の確認

ファイル読み込みの優先順位

デフォルトの配置位置にSPFILEとPFILEがある場合、SPFILEが優先されます。

現在PFILEとSPFILEどちらを使用しているかの判定

以下のSQLでSPFILEのファイルパスが出力される場合はSPFILEでの起動中です。
PFILEで起動中の場合は値が空(null)になります。

PFILE、SPFILEの作成

PFILEの作成

テキストを直接編集することで作成できます。
以下のSQL文により起動済みインスタンスのメモリ上またはSPFILEから作成できます。SPFILEから作成する場合はインスタンスの起動有無は関係ありません。

パスを指定しない場合は所定の配置位置が対象となります。パスを指定しない場合の上書きに気を付けてください。

SPFILEの作成

メモリ上の値、またはPFILEからSPFILEを作成することができます。PFILEから作成する場合はインスタンスの起動有無は関係ありません。

パスを指定しない場合は所定の配置位置が対象となります。パスを指定しない場合の上書きに気を付けてください。

記載内容の優先度

以下のように同じ値がインスタンス名付きと*(全インスタンスを指す)付きで記載されている場合、インスタンス名付きが優先されます。PFILE/SPFILEどちらも優先順位は同じです。

PFILEの場合

ファイルの中で以下のようにエントリがかぶっている場合、orclインスタンスに対して個別指定しているものが優先されます。

SPFILEの場合

以下SQLでSIDが*とorclで同じエントリがある場合、orclインスタンスに対して、個別指定しているものが優先されます。
SPFILEからPFILEを作成したときに指定していない値で、以下のようにアンダースコアが2つ前について記述されたエントリがありますが、これは稼働中に動的に割り当てられている値となります。
orcl.__data_transfer_cache_size=0

パラメータ値の確認

現行値の確認

以下のSQL文により、現在設定されている値がわかります。

ISDEFAULT - パラメータがデフォルト値に設定されるか(TRUE)、またはパラメータ値がパラメータ・ファイルに指定されているか(FALSE)
CON_ID - 12cのコンテナデータベースで使用する。CDB全体の値は0、ルートのみに適用される値は1、その他各コンテナIDが入る。非CDBの場合は0となる。

以下の列でオンライン変更可能な対象も確認できます。

ISSES_MODIFIABLE - パラメータをALTER SESSIONで変更できるかどうか(TRUE | FALSE)
ISSYS_MODIFIABLE - パラメータをALTER SYSTEMで変更できるかどうか。
・ IMMEDIATE - インスタンスの起動に使用されたパラメータ・ファイルのタイプに関係なく、ALTER SYSTEMでパラメータを変更できる。変更は即座に反映されます。
・ DEFERRED - インスタンスの起動に使用されたパラメータ・ファイルのタイプに関係なく、ALTER SYSTEMでパラメータを変更できる。変更結果は以降のセッションで有効になる。
・ FALSE - インスタンスの起動にサーバー・パラメータ・ファイルが使用されないかぎり、ALTER SYSTEMではパラメータを変更できない。変更結果は以降のインスタンスで有効になる。

SPFILE値の確認

以下のSQL文により、SPFILEに設定されている値がわかります。

ISSPECIFIED - パラメータがサーバー・パラメータ・ファイルに指定されているか(TRUE)指定されていないか(FALSE)

パラメータの変更

PFILEのパラメータの変更

デフォルトの位置([ORACLE_HOME]/dbs/init[ORACLE_SID].ora)のファイル記載内容を変更し、インスタンスを再起動します。
記載するフォーマットは以下のようになります。

[インスタンス名]に*を指定した場合、記載されたパラメータファイルを使用している、すべてのインスタンスという意味になります。

SPFILEのパラメータ変更

SQL文を使用して変更します。

SCOPEとSIDは省略可能です。
SIDを指定しない場合は[インスタンス名]は*が指定されたことになります。
[対象]にはBOTH/SPFILE/MEMORYのいずれかを指定します。SCOPEを指定しない場合は、BOTHが指定されたことになります。

・ BOTH - 起動済みのインスタンスのメモリ上と、SPFILEに書き込みます。SPFILEに書き込まれると、次回起動時にも値が有効化されたままです。
・ SPFILE - SPFILE上のみの変更を行います。次回起動されるまで、値は有効になりません。
・ MEMORY - メモリ上のみ変更します。次回起動したときに値は元に戻ります。

以下のSQL文により、SPFILE上からエントリを消します。

SIDを指定しない場合は[インスタンス名]は*が指定されたことになります。
RESET指定時にSCOPEは指定可能ですが、現状SPFILEしか選択できません。

Real Application Cluster(RAC)環境におけるSPFILE読み込み

srvctlコマンドによる起動

以下のコマンド実行時に出力される、"Spfile:"が優先されます。

SQL*Plusによる起動

通常の読み込み順と同じ順序で読み込まれます。

PFILEに以下の1行の記載のみをしておくことで、起動時のSPFILEを指定できます。
例えば共有のSPFILEを指定することが可能です。

デフォルトの配置位置にSPFILEが存在する場合は、PFILEより先にそちら読み込まれるため、デフォルトのSPFILEが使用されることに注意してください。

関連記事

関連記事が存在しません