SPFILEとPFILEの概要と操作
対応バージョン
Oracle Database 10.1 - 11.2
2015-02-11記事公開
SPFILEとPFILEは初期化パラメータを管理するファイルです。
現在PFILEで管理するメリットはありません。SPFILEを使用している場合、PFILEを使用する場面は、RAC環境での共有するSPFILE先の記載や、バックアップとしてPFILEにしておきたい程度の用途になります。
内容、操作方法を理解し、SPFILE管理に移行することを推奨します。
SPFILEとPFILEとは
PFILE
名称 : 初期化パラメータ・ファイル
配置位置: [ORACLE_HOME]/dbs/init[ORACLE_SID].ora
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などのコマンドを使用して確認してください。
1 |
$ strings ${ORACLE_HOME}/dbs/spfileorcl.ora |
SPFILEとPFILEの使用状況の確認
ファイル読み込みの優先順位
デフォルトの配置位置にSPFILEとPFILEがある場合、SPFILEが優先されます。
現在PFILEとSPFILEどちらを使用しているかの判定
以下のSQLでSPFILEのファイルパスが出力される場合はSPFILEでの起動中です。
PFILEで起動中の場合は値が空(null)になります。
1 |
SQL> show parameter spfile |
PFILE、SPFILEの作成
PFILEの作成
テキストを直接編集することで作成できます。
以下のSQL文により起動済みインスタンスのメモリ上またはSPFILEから作成できます。SPFILEから作成する場合はインスタンスの起動有無は関係ありません。
1 2 |
SQL> create pfile='[作成するPFILEのフルパスのファイル名] from spfile='[元となるSPFILEのファイル名]'; SQL> create pfile='[作成するPFILEのフルパスのファイル名] from memory; |
SPFILEの作成
メモリ上の値、またはPFILEからSPFILEを作成することができます。PFILEから作成する場合はインスタンスの起動有無は関係ありません。
1 2 |
SQL> create spfile='[作成するSPFILEのフルパスのファイル名] from pfile='[元となるPFILEのファイル名]'; SQL> create spfile='[作成するSPFILEのフルパスのファイル名] from memory; |
パスを指定しない場合は所定の配置位置が対象となります。パスを指定しない場合の上書きに気を付けてください。
記載内容の優先度
以下のように同じ値がインスタンス名付きと*(全インスタンスを指す)付きで記載されている場合、インスタンス名付きが優先されます。PFILE/SPFILEどちらも優先順位は同じです。
PFILEの場合
ファイルの中で以下のようにエントリがかぶっている場合、orclインスタンスに対して個別指定しているものが優先されます。
1 2 |
orcl.[初期化パラメータ名]=[値] *.[初期化パラメータ名]=[値] |
SPFILEの場合
以下SQLでSIDが*とorclで同じエントリがある場合、orclインスタンスに対して、個別指定しているものが優先されます。
1 2 3 4 5 |
SQL> set trim on pages 1000 line 120 SQL> col name for a25 SQL> col sid for a10 SQL> col value for a80 SQL> SELECT sid, name, value from v$spparameter where isspecified = 'TRUE' order by name, sid; |
orcl.__data_transfer_cache_size=0
パラメータ値の確認
現行値の確認
以下のSQL文により、現在設定されている値がわかります。
1 2 |
SQL> show parameter [パラメータ名] SQL> select NAME, VALUE, ISDEFAULT, CON_ID from v$spparameter order by name; |
CON_ID - 12cのコンテナデータベースで使用する。CDB全体の値は0、ルートのみに適用される値は1、その他各コンテナIDが入る。非CDBの場合は0となる。
以下の列でオンライン変更可能な対象も確認できます。
ISSYS_MODIFIABLE - パラメータをALTER SYSTEMで変更できるかどうか。
・ IMMEDIATE - インスタンスの起動に使用されたパラメータ・ファイルのタイプに関係なく、ALTER SYSTEMでパラメータを変更できる。変更は即座に反映されます。
・ DEFERRED - インスタンスの起動に使用されたパラメータ・ファイルのタイプに関係なく、ALTER SYSTEMでパラメータを変更できる。変更結果は以降のセッションで有効になる。
・ FALSE - インスタンスの起動にサーバー・パラメータ・ファイルが使用されないかぎり、ALTER SYSTEMではパラメータを変更できない。変更結果は以降のインスタンスで有効になる。
SPFILE値の確認
以下のSQL文により、SPFILEに設定されている値がわかります。
1 2 |
SQL> show spparameter SQL> select SID, NAME, VALUE, ISSPECIFIED, CON_ID from v$spparameter order by name, sid; |
パラメータの変更
PFILEのパラメータの変更
デフォルトの位置([ORACLE_HOME]/dbs/init[ORACLE_SID].ora)のファイル記載内容を変更し、インスタンスを再起動します。
記載するフォーマットは以下のようになります。
1 |
[インスタンス名].[パラメータ] = [値] |
[インスタンス名]に*を指定した場合、記載されたパラメータファイルを使用している、すべてのインスタンスという意味になります。
SPFILEのパラメータ変更
SQL文を使用して変更します。
1 |
SQL> ALTER SYSTEM SET [パラメータ名] = [値] SCOPE = [対象] SID='[インスタンス名]'; |
SCOPEとSIDは省略可能です。
SIDを指定しない場合は[インスタンス名]は*が指定されたことになります。
[対象]にはBOTH/SPFILE/MEMORYのいずれかを指定します。SCOPEを指定しない場合は、BOTHが指定されたことになります。
・ SPFILE - SPFILE上のみの変更を行います。次回起動されるまで、値は有効になりません。
・ MEMORY - メモリ上のみ変更します。次回起動したときに値は元に戻ります。
以下のSQL文により、SPFILE上からエントリを消します。
1 |
SQL> ALTER SYSTEM RESET [パラメータ値] SID='[インスタンス名]'; |
SIDを指定しない場合は[インスタンス名]は*が指定されたことになります。
RESET指定時にSCOPEは指定可能ですが、現状SPFILEしか選択できません。
Real Application Cluster(RAC)環境におけるSPFILE読み込み
srvctlコマンドによる起動
以下のコマンド実行時に出力される、"Spfile:"が優先されます。
1 |
$ srvctl config database -d [DB名] |
SQL*Plusによる起動
通常の読み込み順と同じ順序で読み込まれます。
1 2 |
$ sqlplus / as sysdba SQL> startup |
PFILEに以下の1行の記載のみをしておくことで、起動時のSPFILEを指定できます。
例えば共有のSPFILEを指定することが可能です。
1 |
SPFILE='[SPFILEのフルパス]' |