美文网首页
spfile和pfile(转)

spfile和pfile(转)

作者: busy_living | 来源:发表于2019-04-01 23:25 被阅读0次

pfile是initial parm file,初始化参数文件

spfile是server parm file,是服务器参数文件

ORACLE的SPFILE与PFILE

    ORACLE中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件,可以分为两种类型。它们是在数据库实例启动时候加载的,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。

初始化参数文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用PFILE方式存储初始化参数,该文件为文本文件。 

服务器参数文件(Server Parameter Files),从Oracle 9i开始,Oracle引入了SPFILE文件,该文件为二进制格式,不能通过手工修改。

1:PFILE与SPFILE的区别 

     1:PFILE是文本文件的,而SPFILE是二进制格式的。PFILE文件可以用文本编辑器打开手工配置、而SPFILE不行,只能通过SQL命令在线修改。从操作系统上可以看到这两者的区别,初始化参数文件为ASCII文本文件,SPFILE为数据文件。

很多人有个很纳闷的疑问,为什么SPFILE是二进制文件,但是可以用more命令查看?如下所示

大家把这个文件用文本编辑器打开,就会发现确实是二进制文件,如下图所示:

    2:SPFILE的修改是可以通过SQL命令在线修改,不再需要通过手工修改,对于动态参数所有更改可以立即生效,而PFILE的修改必须重启实例才能生效。

    3:手动创建数据库而不是通过DBCA,则开始创建数据库时,只能定义PFILE。

修改spfile参数的三种模式:

scope=both       立即并永久生效,(默认模式)

scope=spfile     下次启动才能生效。

scope=memory     立即生效但下次启动时失效

2: 如何查看SPFILE与PFILE的目录位置?

 2.1 方法一

    2.2 方法二

注意:如果数据库使用spfile参数文件,那么用show parameter spfile与 show parameter pfile的结果一致,如果数据库使用pfile参数文件,那么上面命令得到的结果都是空,这是为什么呢?

我们可以通过SQL_TRACE跟踪查看具体原因:

此时查看/u01/app/oracle/admin/orcl/udump/gsp_ora_3010.trc可以得知,其实show parameter命令本质是通过转换成下面的SQL语句执行的

Code Snippet

SELECT NAME NAME_COL_PLUS_SHOW_PARAM,

DECODE(TYPE,1,'boolean',2,'string',3,'integer',

4,'file',5,'number',

6,'big integer', 'unknown') TYPE,

DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM

FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%spfile%')

ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM

所以show parameter pfile转化为如下SQL语句

Code Snippet

SELECT NAME NAME_COL_PLUS_SHOW_PARAM,

DECODE(TYPE,1,'boolean',2,'string',3,'integer',

4,'file',5,'number',

6,'big integer', 'unknown') TYPE,

DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM

FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%pfile%')

ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM

而动态视图V$PARAMETER里面没有参数pfile,所以两者结果一致,当数据库以参数pfile启动时,查询结果为空。

3: 判断数据库从SPFILE还是PFILE启动?

方法1:查询动态视图V$PARAMETER,如果VALUE值为非空,则是SPFILE启动,否则是PFILE。

    SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';

方法2:SHOW PARAMETER命令查看 

SQL> show parameter spfile; 

方法3:通过v$spparameter视图,如果一下查询返回0值,表示你在使用pfile,否则表明你使用的是spfile

SQL> SELECT COUNT(1) FROM v$spparameter where value is not null;

COUNT(1) 

---------- 

22 

SQL> select decode(count(1), 1, 'spfile', 'pfile') USED 

2  from v$spparameter 

3  where rownum=1 and isspecified ='TRUE';

USED 

-------------- 

spfile

参数文件的搜索顺序

参数文件的搜索顺序如下:

1)spfile<sid>.ora

Unix/Linux缺省目录 $ORACLE_HOME/dbs/ 

Windows缺省目录    %ORACLE_HOME%\database

2) spfile.ora 

Unix/Linux缺省目录 $ORACLE_HOME/dbs/ 

Windows缺省目录    %ORACLE_HOME%\database

3) init<sid>.ora

Unix/Linux缺省目录 $ORACLE_HOME/dbs/ 

Windows缺省目录    %ORACLE_HOME%\database

重建PFILE或SPFILE

create spfile[='xxxxx'] from pfile[='xxxx']; 

create pfile[='xxxxx'] from spfile[='xxxx']; 

通过spfile创建pfile文件(此时会在$ORACLE_HOME/dbs目录下生成pfile:initwgods.ora),当然你也可以指定参数文件的位置。 

SQL> create pfile from spfile;

File created.

scope参数说明: 

静态参数 必须指定为scope 

动态参数issys_modifiable为IMMEDIATE不加scope默认的是 both,而动态参数issys_modifiable为DEFERRED的必须加上scope=spfile 或者 加上derferred,

参考资料:[深入解析Oracle.DBA入门进阶与诊断案例].盖国强

相关文章

网友评论

      本文标题:spfile和pfile(转)

      本文链接:https://www.haomeiwen.com/subject/axeibqtx.html