oracle中的参数文件pfile和spfile
概念:
oracle中的参数初始化文件从9i开始有2种:文本参数文件和服务器参数文件(9i新增加的)。他们是在数据库实例启动时候加载的,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。
位置(这里的位置版本不一样可能有变化):
初始化参数文件(pfile):%oracle_home%\database\nit<ORACLE_SID>.ora------ASCII文本文件(可以直接编辑)
服务器参数文件(spfile): %oracle_home%\dbs\spfile<ORACLE_SID>.ora----二进制文件(不可以直接编辑)
查询:
通过V$PARAMETER试图可以查询系统的初始化参数,查询方式有两种
1.show parameter pra_name
2.select name,name_col_plus_show_param from V$PARAMETER where name='pra_name';
实际上,以上两种方式是一样的。方式1是方式2的封装语句,从告警文件中可以发现,show parameter其实是执行了方式2的语句。
文件特点:
A.PFILE
这种文件是在Oracle9i之前的唯一参数文件,对这类文件的修改是需要手工进行的,并且修改后,重启Oracle实例才会生效。
B.SPFILE
这种文件是在Oracle9i中引入的新的参数文件机制,可以使用ALTER SYSTEM SET pra_name="value" SCOPE=scopevalue命令来修改参数。对于动态参数所有更改可以立即生效,甚至可以将更改同时应用到SPFILE文件与数据库实例。对于静态参数只能将修改应用到SPFILE,在Oracle实例重启后生效。
这里的SCOPE有三种:MEMORY,SPFILE,BOTH.
MEMEORY是只修改当前实例,只在当前实例下生效;重启后,将失效。
SPFILE是只修改服务器参数文件,只在下次启动后失效。
BOTH是同时修改当前实例和服务器参数文件,对修改立刻有效,并在将来持续有效。
他们是可以相互创建的。可以使用默认位置创建或者指定位置创建
create spfile[='xxxxx'] from pfile[='xxxx']; create pfile[='xxxxx'] from spfile[='xxxx']; 这里就可以得出修改spfile参数的第二个方法:先关闭数据库,然后create pfile from spfile;然后修改这个pfile,然后create spfile from pfile;
还有一个特殊的第三种方法:在你的pfile文件里面加入这么一个参数 spfile='xxxxxx\xxx\spfileorcl.ora' 这样这个pfile文件就有了所有spfile的参数,这个时候你在pfile里面指定的参数可以覆盖spfile里面的参数,这样就可以改正错误的参数,然后你startup file='xxx\xxx\xxx\initorcl.ora' 这里的路径就是刚才这个spfile文件。
他们都是必不可少的,有了spfile并不意味着pfile就不需要了。
A.在数据库第一次被创建的时候,系统收集到数据库创建者设置的各个参数,生成PFILE的;然后,数据库第一次启动就是依靠这个PFILE,启动后,根据PFILE创建SPFILE文件,之后,将不再需要PFILE文件。下次启动使用的是PFILE。
B.如果将来数据库不出现故障,那么PFILE很可能一直使用。但是一旦出现spfile损坏或者需要重新弄份新的spfile,我们都可以使用pfile来建立新的spfile。
利用服务器初始参数文件验证startup数据库的过程
过程大概如下:
1、有file参数就先用file参数指定的文本参数文件来启动数据库
2、如果没有file参数指定,那么就去本地默认的位置查找服务器初始化参数文件
3、如果没有找到服务器初始化参数文件,就去默认位置寻找文本初始化参数文件
验证过程如下:
A.默认我们前面已经看到了它是以服务器初始化参数文件启动的,因为当时我们没有指定file参数
B.接下来试试指定这个file参数
这里的value为null,就表示这里的启动是以pfile启动的
注意这里一点不可以指定服务器参数文件spfile来启动数据库
C接下来我们把spfile参数文件删除掉,看看它是否最后会用pfile来启动呢
我先删除掉我们的spfile文件,然后看下图:
OK,这里的value又是NULL,正面这里的数据库的启动是以pfile来启动的.
D.刚才我们把spfile给删除了,现在我们来重建它
这个时候你回到你的%oracle_home%/database下你就又重新看到了你的spfile文件
我们重启数据库,看看它正常没。
这里注意我用了startup force 这个force参数一般用来重启数据库
看,这边我们又以spfile来启动了..