在9i以前,参数文件只有一种,它是文本格式的,称为pfile,在9i及之后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的。这两种参数文件都是用来存储参数配置以供oracle读取的,但也有不一样点,注意如下几点:linux
1)pfile是文本文件,spfile是二进制文件;sql
2)对于参数的配置,pfile能够直接以文本编辑器打开手工配置,而spfile不行,必须在数据库启动后,经过sql命令进行在线修改,固然spfile也可用文本编辑器打开,把里面文本的内容复制出来放在pfile中,但绝对不能够直接修改,直接修改后会使文件没法读取。数据库
3)pfile配置改变后,要使用其生效,必须从新启动数据库,spfile的配置生效时限和做用域能够由修改参数的sql命令指定,能够当即生效,也能够不当即生效。固然有些参数的修改必须重启数据库才能生效;windows
4)能够用sql命令由pfile建立spfile,也能够由spfile建立pfile;服务器
5)若是是手动建立数据库而不是经过DBCA,则开始建立数据库时,你只能定义pfile。由于它是文本格式的;session
如今通常普通生产库都采用spfile启动数据库,pfile确实没有用的理由了,感受只有如下状况才会使用pfile:oracle
1)入门学习时,为了理解初始化参数编辑器
2)建立数据库时,由于这时还没spfile学习
3)恢复数据库时unix
4)采用RAC的生产库中若是要共用spfile,能够建一个初始的pfile,而后在pfile指定spfile为共享设备文件
...............
2.建立spfile和pfile语法
l 建立SPFILE(只能建在数据库所在的机器上)
CREATE SPFILE [= 'spfile_name'] FROM PFILE [= 'pfile_name'];
若是命令中未指定spfile的路径则会在缺省路径建立spfile文件(%ORACLE_HOME%/database/spfile<SID>.ora)
这个与spfile参数无关(rac中共享spfile时要注意)
l 建立PFILE
CREATE PFILE [= 'pfile_name'] FROM SPFILE [= 'spfile_name'];
若是命令中未指定spfile的路径则会从缺省路径(%ORACLE_HOME%/database/spfile<SID>.ora)建立pfile文件
注:语法中建立和指定的spfile和pfile都是服务器路径
注:不能建立已经由数据库实例启动的spfile(在nomount状态下也不行)
3.数据库启动时spfile和pfile的加载顺序
初始化参数是在数据库实例启动时(startup nomount)加载。
若是startup命令中未指定pfile参数,在windows系统中数据库启动时会按以下顺序查找启动参数文件:
%ORACLE_HOME%/database/SPFILE<SID>.ora
%ORACLE_HOME%/database/SPFILE.ora
%ORACLE_HOME%/database/init<SID>.ora
在unix或linux系统中数据库启动时会按以下顺序查找启动参数文件:
%ORACLE_HOME%/dbs/SPFILE<SID>.ora
%ORACLE_HOME%/dbs/SPFILE.ora
%ORACLE_HOME%/dbs/init<SID>.ora
也就是说先找spfile<sid>.ora文件,若是spfile<sid>.ora没有,则找spfile.ora文件,最后才会去找init<sid>.ora的pfile文件。
使用指定pfile启动数据库则数据库会使用指定的pfile来加载数据库参数:
命令以下:
startup pfile='<pfile>'
注:以pfile启动的实例,修改初始化参数时不能使用scope=spfile的语法。
若是参数文件(无论是pfile仍是spfile)中指定了spfile的参数,则还会从指定的spfile中再读取配置的参数,这样数据库的参数就包括了两个文件的内容。
4.数据库启动参数的加载顺序
加载顺序按文件中顺序读取
若是文件中有两个相同的参数名则以最后出现的为准,如下例子说明了这个问题。
若有一个spfile文件(myspfile.ora),包括两个参数:
sessions=150
processes=200
另外有一个pfile文件(mypfile.ora),里面包括三个参数,其中指定了spfile为前面的spfile文件
processes=100
sessions=100
spfile='myspfile.ora'
processes=180
当使用mypfile.ora启动数据库时,会按以下顺序读取参数
1)processes=100
2) sessions=100
3) spfile='myspfile.ora'
3.1) sessions=150(从新加载)
3.2) processes=200(从新加载)
4)processes=180(再次从新加载)
最后加载的数据库参数为
sessions=150
spfile='myspfile.ora'
processes=180
5.关于show parameter spfile时显示的内容
若是是采用pfile指定了spfile参数,则显示指定的spfile
若是是采用缺省的spfile启动,则显示缺省的spfile文件名,无论spfile还有没有指定其它的spfile文件。
6.关于spfile递归调用
若是出现spfile递归调用,则ORACLE启动时会报错:
SQL> startup nomount;
ORA-03113: 通讯通道的文件结束
SQL>
spfile递归调用就是指
spfile1.spfile='spfile2'
spfile2.spfile='spfile1'
这样的参数配置
7.初始化参数的修改方法
分为手动修改和在线修改。
手动修改用于修改pfile,直接用文本编辑打开pfile修改。要使用修改生效,须重启数据库。
在线修改是在数据库运行时,用alter system命令进行修改,命令以下(详细的命令 语句请参考oracle官方参考文档):
alter system set parameter_name = parameter_value [, parameter_value ]...
[ COMMENT 'text' ]
[ DEFERRED ]
[ SCOPE = { MEMORY | SPFILE | BOTH } ]
[ SID = { 'sid' | * } ]
注:
[ COMMENT 'text' ] :表示能够加注释,如 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 2008-05-19"
[ DEFERRED ]:表示所做修改只适用于未来的会话,对当前已有的会话不影响,这个参数只对少数参数有用,具体可以使用的参数能够查看v$parameter视图
select * from v$parameter where issys_modifiable='DEFERRED'
[ SCOPE = { MEMORY | SPFILE | BOTH } ]:
SPFILE:修改只对SPFILE有效,不影响当前实例,须要重启数据库才能生效;
MEMORY:修改只对内存有效,即只对当前实例有效,且当即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;
BOTH:顾名思义,包含以上两种,当即生效,且永久生效。
全部的参数均可以使用spfile,部份参数能够使用memory,能够使用以下SQL查询不能使用memory方式修改的参数
select * from v$parameter where issys_modifiable='FALSE'
对于ALTER SYSTEM的参数修改命令,请注意如下几点:
1)若是当前实例使用的是pfile而非spfile,则scope=spfile或scope=both会产生错误;
2)若是实例以pfile启动,则scope的默认值为MEMORY,若以spfile启动,则默认值为BOTH;
[ SID = { 'sid' | * } ]
指定修改参数的做用实例号,若是为*则表示全部实例,这个选项用于RAC数据库
8.删除初始化参数:
alter system reset parameter_name
[ SCOPE = { MEMORY | SPFILE | BOTH } ]
[ SID = 'sid' ]
对于有些参数也能够使用 ALTER SYSTEM SET PARAMETER=''达到相同的效果;
9.初始化参数的相关系统视图
9.v$parameter
9.v$parameter2
9.v$system_parameter
9.v$system_parameter2
9.gv$parameter
9.gv$parameter2
9.gv$system_parameter
9.gv$system_parameter2
SQL> desc v$parameter;
出处:交大Oracle课程提供的参考资料