Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件。它们是在数据库实例启动时候加载的,决定了数据库的物理 结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。可以分为两种类型:
1.pfile: 初始化参数文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用pfile方式存储初始化参数,pfile 默认的名称为“init+例程名.ora”文件路径:/u01/app/oracle/product/11.2.0/db_1/dbs,这是一个文本文件,可以用任何文本编辑工具打开。
2.spfile:服务器参数文件(Server Parameter Files),从Oracle 9i开始,Oracle引入了Spfile文件,spfile 默认的名称为“spfile+例程名.ora”文件路径:/u01/app/oracle/product/11.2.0/db_1/dbs 以二进制文本形式存在,不能用vi编辑器对其中参数进行修改,只能通过SQL命令在线修改。
[oracle@oracle11g dbs]$ ll
total 28
-rw-rw---- 1 oracle oinstall 1544 Dec 31 13:32 hc_orcl.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r--r-- 1 oracle oinstall 1062 Dec 31 10:44 initorcl.ora
-rw-r----- 1 oracle oinstall 24 Sep 17 20:25 lkORCL
-rw-r----- 1 oracle oinstall 1536 Dec 31 13:44 orapworcl
-rw-r----- 1 oracle oinstall 1536 Oct 15 12:07 orapworcl.bak
-rw-r----- 1 oracle oinstall 3584 Dec 31 13:32 spfileorcl.ora
[oracle@oracle11g dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@oracle11g dbs]$
使用spfile的好处:
1、spfile改正了pfile管理混乱的问题,在多结点的环境里,pfile会有多个image,启动时候需要跟踪最新的image。这是个烦琐的过程。用spfile以后,所有参数改变都写到spfile里面(只要定义scope=spfile或both),参数配置有个权威的来源。
2、9i以前一般都是要备份pfile后再来做参数的修改,而且pfile的修改必须重启实例才能生效。非常的不方便;在9i以后的spfile就可以同通过命令修改指定的参数了,而且有很多参数都不用重启数据库,能够在线生效,这个在线生效的参数会随着数据库的版本增高而增加。如果参数修改有问题数据库起不来了可以在 nomount状态下创建成pfile再修改回来即可。
查找pfile和spfile的位置
1.select name,value,display_value from v$parameter where name='spfile';
2.show parameter spfile
判断当前oracle使用使用pfile还是spfile参数文件启动
select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified ='TRUE';
pfile和spfile文件相互创建
create spfile[='xxxxx'] from pfile[='xxxx'];——[指定文件路径]
create pfile[='xxxxx'] from spfile[='xxxx'];
SQL> create pfile from spfile;
File created.
SQL> exit
spfile和pfile启动优先级
1、startup 启动次序 spfile优先于pfile。查找文件的顺序是 spfileSID.ora——〉spfile.ora——〉initSID.ora——〉init.ora(spfile优先于pfile)。
2、startup pfile='文件目录' 使用pfile启动,则需指定完整路径,或删除spfile.
使用spfile启动数据库模式下的三种scope
- scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效。适用于动态和静态初始化参数。
- scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效。在重启DB后会丟失,会复原为修改前的参数值。
- scope=both: 对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项,如果使用了服务器参数文件,则在执行alter system语句时,scope=both是default的选项。