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. Netty介绍

    Netty是由JBOSS开发的高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输等协议的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Li ...

  2. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)

    一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...

  3. jquery 图片轮播demo实现

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 图片轮播demo,弄清楚过程其实是一个很简单的东西,看网上都没有什么实质性的代码,就自己把过程捋了一遍实现了. 这次因为随手写的,所以没有做 ...

  4. Buffer cache hit ratio性能计数器真的可以作为内存瓶颈的判断指标吗?

    Buffer cache hit ratio官方是这么解释的:“指示在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比.” Buffer cache hit ratio被很多人当做判断内存的性能指 ...

  5. Java进击C#——语法之ADO.NET

    本章简言 上一章讲到关于C#语法的基础部分.了解相关的基础部分之后我们就要去了解一下C#是什么样子访问数库的.C#把访问数据库这一部分的知识点叫作ADO.NET.即是JAVA常常讲到的JDBC这一部分 ...

  6. Effective java笔记(十),序列化

    将一个对象编码成字节流称作将该对象「序列化」.相反,从字节流编码中重新构建对象被称作「反序列化」.一旦对象被「序列化」后,它的编码就可以从一台虚拟机传递到另一台虚拟机,或被存储到磁盘上,供以后「反序列 ...

  7. identity与ASP.NET 模拟

    默认情况下,ASP.NET应用程序以本机的ASPNET帐号运行,该帐号属于普通用户组,权限受到一定的限制,以保障ASP.NET应用程序运行的安全.但是有时需要某个ASP.NET应用程序或者程序中的某段 ...

  8. 【C#】可空类型(Nullable)

    C# 可空类型(Nullable) C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值. 例如,Nullable& ...

  9. WEB前端--背景相关知识点总结

    一.背景(background) 它是单一属性 但是它衍生出很多的复合属性 background-color  背景色 background-image 背景图片 background-repeat ...

  10. WindowsAPI调用和OCR图片识别

    傻了吧唧的装双系统.成功的干崩了原本的系统.现在重装VS.闲的没事胡扯几句. WindowsAPI在每一台Windows系统上开放标准API供开发人员调用.功能齐全.在这里只介绍三个部分. 1.利用A ...