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命令查看?如下所示

[oracle@DB-Server dbs]$ more spfilewgods.ora

_size=3992977408
wgods.__java_pool_size=16777216
wgods.__large_pool_size=16777216
wgods.__shared_pool_size=234881024
wgods.__streams_pool_size=16777216
*.aq_tm_processes=0
*.audit_file_dest='/database/admin/wgods/adump'
*.background_dump_dest='/database/admin/wgods/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/database/oradata/wgods/control01.ctl', '/database/oradata/wgods/control02.ctl', '/database/oradata/wgods/control03.ctl'
*.core_dump_dest='/database/admin/wgods/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_files=1024
*.db_name='wgods'
*.db_recovery_file_dest='/database/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_writer_processes=3
*.dispatchers='(PROTOCOL=TCP) (SERVICE=wgodsXDB)'
*.job_queue_processes=5
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=761266176
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=4294967296
*.sga_target=4294967296
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/database/admin/wgods/udump'
*.utl_file_dir='/database/flash_recovery_area/WGODS/logmnr_dict'

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

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

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

修改spfile参数的三种模式:

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

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

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

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

2.1 方法一

方法1
  1. SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';

    2.2 方法二

方法2
  1. SQL> show parameter spfile
  2. NAME                 TYPE            VALUE
  3. ------------------------ ----------- ------------------------------
  4. spfile                 string      /database/product/dbhome_1/dbs/spfilewgods.ora
  5. SQL> show parameter pfile
  6. NAME                   TYPE          VALUE
  7. ------------------------ ----------- ------------------------------
  8. spfile                   string   /database/product/dbhome_1/dbs/spfilewgods.ora

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

Code Snippet
  1. SQL> show parameter spfile;
  2. NAME                TYPE     VALUE
  3. -------------------------------- ----------- -----------
  4. spfile             string
  5. SQL> show parameter pfile;
  6. NAME                TYPE     VALUE
  7. -------------------------------- ----------- -----------
  8. spfile             string
  9. SQL>

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

Code Snippet
  1. SQL> ALTER SESSION SET SQL_TRACE=TRUE;
  2. Session altered.
  3. SQL> show parameter spfile;
  4. NAME        TYPE                VALUE
  5. ------------ ----------- ------------------------------
  6. spfile      string  /u01/app/oracle/product/dbhome_1/dbs/spfilegsp.ora
  7. SQL> ALTER SESSION SET SQL_TRACE=FALSE;
  8. Session altered.
  9. SQL> SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
  10. P.SPID || '.trc' TRACE_FILE_NAME
  11. FROM
  12. ( SELECT P.SPID
  13. FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
  14. WHERE M.STATISTIC# =1
  15. AND S.SID = M.SID
  16. AND P.ADDR = S.PADDR
  17. ) P,
  18. ( SELECT T.INSTANCE
  19. FROM V$THREAD T, V$PARAMETER V
  20. WHERE V.NAME ='thread'
  21. AND(V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
  22. ) I,
  23. (SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T;
  24. TRACE_FILE_NAME
  25. --------------------------------------------------------------------------------
  26. /u01/app/oracle/admin/orcl/udump/gsp_ora_3010.trc
  27. SQL>

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

Code Snippet
  1. SELECT NAME NAME_COL_PLUS_SHOW_PARAM,
  2. DECODE(TYPE,1,'boolean',2,'string',3,'integer',
  3. 4,'file',5,'number',
  4. 6,'big integer', 'unknown') TYPE,
  5. DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM
  6. FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%spfile%')
  7. ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM

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

Code Snippet
  1. SELECT NAME NAME_COL_PLUS_SHOW_PARAM,
  2. DECODE(TYPE,1,'boolean',2,'string',3,'integer',
  3. 4,'file',5,'number',
  4. 6,'big integer', 'unknown') TYPE,
  5. DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM
  6. FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%pfile%')
  7. 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,

参数类型

spfile

memory

both

deferred

静态参数

可以,重启服务器生效

不可以

不可以

不可以

动态参数(issys_modifiable为immediate

可以,重启服务器生效

可以,立即生效,重启服务失效

可以,立即生效,重启服务器仍然有效果

可以

动态参数(issys_modifiable为deferred)

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

ORACLE的SPFILE与PFILE的更多相关文章

  1. oracle spfile和pfile文件

    pfile(Parameter File)从oracle8i开始使用,在oracle9i中也可以用.它以文本文件的形式存在,可以用vi等编辑器对 其中数据库参数进行修改.文件格式为initSID.or ...

  2. oracle spfile和pfile文件(转)

    --======================== -->Oracle 参数文件 --======================== /* 参数文件(10g中的参数文件) 主要用来记录数据库 ...

  3. oracle参数文件spfile和pfile

    一.参数文件说明 PFILE(Initialiazation Parameter Files)初始化参数文件,是文本文件,可直使用文本编辑器查看.如果数据库使用的是初始化参数文件PFILE,要想永久修 ...

  4. Oracle 初始化参数文件pfile和spfile

    pfile和spfile差额 pfile :Oracle 9i之前.ORACLE使用我们一直PFILE存储的初始化参数,,能够在操作系统级别改动. 当spfile文件改动出现错误导致oracle无法启 ...

  5. 判断ORACLE启动时使用spfile还是pfile

    自Oracle 9i以后启动的时候默认使用的初始化文件是spfile,我们可以通过如下三种方式来判断是SPFILE还是PFILE方式启动数据库.1.show parameter spfile2.sho ...

  6. oracle基础知识(六)----spfile与pfile

    一, 认识参数文件      Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的,决定了数据库的物理 结构.内存.数据库的限制及系统大量的默认值 ...

  7. 浅谈oracle10G spfile与pfile(转)

    转自:http://blog.csdn.net/onebigday/article/details/6108348,http://www.linuxidc.com/Linux/2012-11/7371 ...

  8. SPFILE 、PFILE 的全面解读

    这里先阐述一下数据库的启动过程: 1.      启动实例/例程(nomount状态)时,读取参数文件(文本文件PFILE 或服务器参数文件SPFILE),分配SGA.启动后台进程.打开告警文件及后台 ...

  9. 修改oracle系统参数spfile导致数据库无法启动解决

    错误示范: SQL> alter system set nls_date_format='yyyy-mm-dd 24hh:mi:ss' scope=spfile;System altered.我 ...

随机推荐

  1. C/C++ 双精度double 数据相加出错缺陷解释

    不知道有没有人和我一样遇到过这样一个问题,请看下面代码. #include<iostream> using namespace std; int main(){ double a=2.3, ...

  2. WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 某个项目需求中需要在前端进行画圆查询,将圆范围上的多边形要素 ...

  3. SQL Server利用递归把所有【子部门员工】汇总到【一级根节点部门】

    前言 说起这个需求,有点反常规,左边是组织机构树,右边是组织机构对应的员工列表.点击左侧组织机构时传一个组织机构ID,然后查询该组织机构以及其所属的一级节点,如果有部门直属单击节点组织机构,则挂出来员 ...

  4. JDBC连接SQL Server代码模板

    *                  JDBC连接SQL Server数据库 代码模板* Connection: 连接数据库并担任传送数据的任务:* Statement :  执行SQL语句:* Re ...

  5. Entity Framework Model First下改变数据库脚本的生成方式

    在Entity Framework Model First下, 一个非常常见的需求是改变数据库脚本的生成方式.这个应用场景是指,当用户在Designer上单击鼠标右键,然后选择Generate Dat ...

  6. Ionic2学习笔记(8):Local Storage& SQLite

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5557947.html              Ionic2可以有两种方式来存储数据,Local S ...

  7. Vue.js说说组件

    什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTM ...

  8. Linux基础知识之文件和目录的权限机制

    Linux中的用户 Linux中的用户有三类,分别是: 所有者(u) 同组用户(g) 其他人(o) 如下图所示,假设存在两个组:groupA和groupB,rachel和ross属于组groupA,m ...

  9. Openfire 4.1.0

    http://www.igniterealtime.org/downloads/index.jsp 服务器端口 接口 端口   类型 描述 所有的地址 5222 客户端到服务器 客户端使用标准端口连接 ...

  10. jquery实现tab切换完整代码

    代码如下,保存到html文件打开: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...