PFILE和SPFILE都是Oracle 数据库的参数文件;PFILE格式为文本文件,可以直接编辑文件修改,Oracle 9i 以前只能用PFILE来指定和修改数据库初始化参数;SPFILE 格式为二进制文件,只能通过SQL命令修改,Oracle从 9i 开始,引入了SPFILE.
1. 如何确定数据库用的是PFILE还是SPFILE?
a. 执行如下命令,结果为非空, 用的是SPFILE
Show parameter spfile;
b. 执行如下查询,结果为非空, 用的是SPFILE
SELECT NAME, VALUE, FROM V$PARAMETER WHERE NAME =‘spfile‘;
c. 执行如下查询,结果>0, 用的是SPFILE
SELECT count(*) FROM v$spparameter where isspecified = true;
2. 当使用PFILE时,修改数据库初始化参数,重启之后才能生效,非常不方便;
当使用SPFILE时,如果修改的是静态的数据库初始化参数,重启之后才能生效;如果修改的是动态的数据库初始化参数,可以不用重启,即可生效。具体见下图:
参数类型 | Scope=spfile | Scope=memory | Scope=both | deferred |
静态参数 | 可以,重启服务器生效 | 不可以 | 不可以 | 不可以 |
动态参数(issys_modifiable为immediate) | 可以,重启服务器生效 | 可以,立即生效,重启服务失效 | 可以,立即生效,重启服务器仍然有效果 | 可以 |
动态参数(issys_modifiable为deferred) | 可以 | 不可以 | 不可以 | 可以 |
3. 创建PFILE 和 SPFILE
create spfile[=’spfile_name‘] from pfile[=‘pfile_name‘];create pfile[=‘pfile_name‘] from spfile[=‘spfile_name‘];
4.参数文件的搜索顺序
a. spfile<sid>.ora
Unix/Linux缺省目录 $ORACLE_HOME/dbs/ Windows缺省目录 %ORACLE_HOME%\database
b. spfile.ora
Unix/Linux缺省目录 $ORACLE_HOME/dbs/ Windows缺省目录 %ORACLE_HOME%\database
c. init<sid>.ora
Unix/Linux缺省目录 $ORACLE_HOME/dbs/ Windows缺省目录 %ORACLE_HOME%\database