在9i以前,Oracle使用pfile存储初始化参数设置,这些参数在实例启动时被读取,任何修改需要重起实例才能生效,使用spfile你可以使用 ALTER SYSTEM或者ALTER SESSION来动态修改那些可动态修改的参数,所有更改可以立即生效,你可以选择使更改只应用于当前实例还是同时应用到spfile。这就使得所有对 spfile的修改都可以在命令行完成,我们可以彻底告别手工修改初始化参数文件,这就大大减少了人为错误的发生。
SPFILE是一个二进制文件,可以使用RMAN进行备份,这样实际上Oracle把参数文件也纳入了备份恢复管理。除了第一次启动数据库需要 PFILE(然后可以根据PFILE创建SPFILE),我们可以不再需要PFILE,ORACLE强烈推荐使用spfile,应用其新特性来存储和维护初始化参数设置。
一. 创建SPFILE
缺省的,ORACLE使用PFILE启动数据库,SPFILE必须由PFILE创建,新创建的SPFILE在下一次启动数据库时生效,CREATE SPFILE需要SYSDBA或者SYSOPER的权限:
语法如下:
CREATE SPFILE[='SPFILE-NAME'] FROM PFILE[='PFILE-NAME']
例:
SQL> create spfile from pfile;
缺省的,spfile创建到系统缺省目录
(Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME\database)
如果SPFILE已经存在,那么创建会返回以下错误:
SQL> create spfile from pfile;
create spfile from pfile
ERROR 位于第 1 行:
ORA-32002: 无法创建已由例程使用的 SPFILE
判断是否使用了SPFILE,你可以使用SHOW命令来显示参数设置,如果以下结果value列返回空值,那么说明你在使用pfile:
SQL> SHOW PARAMETER spfile
NAME TYPE VALUE
------------------------------
spfile string %ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA
二. 使用SPFILE
重新启动数据库,使用startup命令,Oralce将会按照以下顺序在缺省目录中搜索参数文件:
a. spfile${ORACLE_SID}.ora
缺省目录
UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database
b. spfile.ora
缺省目录
UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database
c. init${ORACLESID}.ora
缺省目录
UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database or
${ORACLE_HOME}\admin\db_name\pfile\
创建了spfile,重新启动数据库,Oracle会按顺序搜索以上目录,spfile就会自动生效。
三. 使用pfile/spfile启动数据库
如果你想使用pfile启动数据库,你可以在启动时指定pfile或者删除spfile.
SQL> startup pfile='E:\Oracle\admin\eyglen\pfile\init.ora';
你不能以同样的方式指定spfile。
四. 修改参数
可以通过ALTER SYSTEM或者导入导出来更改SPFILE的内容。
ALTER SYSTEM增加了一个新选项:SCOPE。SCOPE参数有三个可选值:MEMORY ,SPFILE , BOTH
MEMORY:只改变当前实例运行
SPFILE:只改变SPFILE的设置
BOTH:改变实例及SPFILE
注意:不带参数的ALTER SYSTEM语句等同于scope=both,如果修改静态参数,那么需要指定SPFILE参数,否则将会报错。
五. 导出SPFILE文件
SPFILE文件可以导出为文本文件,使用导出、创建过程你可以向SPFILE中添加参数。
SQL> create pfile='e:\initeyglen.ora' from spfile;
文件已创建。
然后我们可以使用这个pfile,或者手动修改其中的参数以启动数据库。
我们修改这个pfile,增加一行
*.log_archive_start=true
使用这个PFILE启动数据库
SQL> startup pfile='e:\initeyglen.ora'
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL> show parameter log_archive_start
NAME TYPE VALUE
------------------------------
log_archive_start Boolean TRUE
然后我们可以使用新的PFILE创建SPFILE
SQL> create spfile from pfile='e:\initeyglen.ora';
文件已创建。
重新启动数据库,新的SPFILE生效。
SQL> startup
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------
spfile string %ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA
SQL> show parameter log_archive_start
NAME TYPE VALUE
------------------------------
log_archive_start Boolean TRUE
六. 关于920/10的PFILE
在$ORACLE_BASE\admin\db_name\spfile下,你很可能可以看到一个类似这样[init.ora.192003215317]名字的文件,这就是初始化
参数文件,只是跟上了时间戳。
对于Oracle920,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据这个文件创建而来,你可以去掉这个长后缀,就是标准的pfile文件了。
如果手动创建数据库,可以看到以下的过程:
SQL> create spfile='e:\oracle\ora10G\database\spfilesunny.ora' FROM pfile='E:\oracle\admin\sunny\scripts\init.ora';
文件已创建。
如果你想要使用pfile启动数据库,那么你可以把spfile改名,NT缺省位于$ORACLE_HOME\database下,这样Oracle就不会使用这个spfile了 。
===========================
//另附一篇文章: