Oracle的参数文件spfile和pfile

我们都知道在Oracle启动时,第一个阶段就是nomount阶段,这个阶段做了以下几个步骤:

  1. 在特定平台(linux或windows等等)的默认路径上搜索spfile,如果没有找到的话,就读取pfile。
  2. 读取文件中的参数来确定初始化参数的值。
  3. 根据参数值来分配SGA。
  4. 开启Oracle的后台进程。
  5. 打开alert log和trace file,根据合理的语法,显示地将参数设定值写入到alert log中。

其中第一步参数文件的搜索顺序是:

spfile<sid>.ora==>spfile.ora==>init<sid>.ora

也就是说首先会搜索本地的spfile<sid>.ora文件,如果没有的话,搜索本地的spfile.ora,如果还没有的话,就搜索init<sid>.ora文件。需要注意的是,如果是Oracle RAC的话,只会搜索本地的参数文件,不会去搜索asm中的参数文件。

下面做试验,来验证这个顺序。

服务器环境:linux 6

数据库:Oracle 11G RAC

在linux下,参数文件的路径在$ORACLE_HOME/dbs下。

1. 没有spfile<sid>.ora和spfile.ora,只有init<sid>.ora

启动数据库,在alert log中看到读取了init<sid>.ora文件。

 

2. 没有spfile<sid>.ora,但是有spfile.ora和init<sid>.ora

启动数据库,在alert log中看到读取了spfile.ora文件。

3. 有spfile<sid>.ora、spfile.ora和init<sid>.ora

启动数据库,在alert log中看到读取了spfile<sid>.ora文件。

通过简单的试验,验证了Oracle在启动时搜索参数文件的顺序为:

spfile<sid>.ora==>spfile.ora==>init<sid>.ora

在单机的情况下,这个顺序是没有问题的,但是在RAC的情况下,spfile是要放在asm中的,也就是说要读取asm中的spfile。要实现这一目的,就要在init<sid>.ora文件中配置spfile的路径,事实上在刚刚搭建完Oraclel 11g RAC的时候,init<sid>.ora的内容如下所示,并且在$ORACLE_HOME/dbs下也没有spfile<sid>.ora和spfile.ora文件。这样就能保证读取的是asm中的参数文件了。