这是Oracle9i的一个新特性,体现了Oracle在安全性和可靠性上的一个提高,Rman的备份也把spfile纳入了备份恢复体系当中。
在Oracle9i中,spfile被引入用于服务器端管理初始化参数。9i以前,Oracle使用Pfile存储初始化参数,在实例启动时被读取,任何修改需要重起实例才能生效,使用spfile可以使用alter system或alter session来动态修改那些可动态修改的参数,并立即生效。
spfile是一个二进制文件。除了第一次启动数据库需要Pfile,我们可以不再需要PFILE,Oracle强烈推荐使用spfile,应用其新特性来存储和维护初始化参数设置。
一、创建SPFILE
缺省的,Oracle使用PFIle启动数据库,spfile必须由pfile创建,新创建的spfile在下一次启动数据库时生效,Create spfile需要sysdba或者sysoper的权限。语法如下:
Create spfile ='Path\spfilename' from pfile='path\pfilename'
如: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文件。
然而意外的时,Oracle并没有向其他文件一样,在运行期间保持锁定,让我们作以下试验:
SQL> host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.BAK
SQL> alter system set db_cache_size=24M scope=both;
系统已更改。
而单独用scope=spfile则会如下:
SQL> alter system set db_cache_size=24M scope=spfile;
alter system set db_cache_size=24M scope=spfile
*
ERROR 位于第 1 行:
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> host rename SPFILEEYGLEN.ORA.BAK SPFILEEYGLEN.ORA
SQL> alter system set db_cache_size=24M scope=spfile;
系统已更改。
二. 使用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就会自动生效。
阅读(1039) | 评论(0) | 转发(0) |