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

  1. [oracle@DB-Server dbs]$ more spfilewgods.ora
  2.  
  3. _size=3992977408
  4. wgods.__java_pool_size=16777216
  5. wgods.__large_pool_size=16777216
  6. wgods.__shared_pool_size=234881024
  7. wgods.__streams_pool_size=16777216
  8. *.aq_tm_processes=0
  9. *.audit_file_dest='/database/admin/wgods/adump'
  10. *.background_dump_dest='/database/admin/wgods/bdump'
  11. *.compatible='10.2.0.1.0'
  12. *.control_files='/database/oradata/wgods/control01.ctl',
  13.  
  14. '/database/oradata/wgods/control02.ctl',
  15.  
  16. '/database/oradata/wgods/control03.ctl'
  17. *.core_dump_dest='/database/admin/wgods/cdump'
  18. *.db_block_size=8192
  19. *.db_domain=''
  20. *.db_file_multiblock_read_count=16
  21. *.db_files=1024
  22. *.db_name='wgods'
  23. *.db_recovery_file_dest='/database/flash_recovery_area'
  24. *.db_recovery_file_dest_size=2147483648
  25. *.db_writer_processes=3
  26. *.dispatchers='(PROTOCOL=TCP) (SERVICE=wgodsXDB)'
  27. *.job_queue_processes=5
  28. *.nls_territory='CHINA'
  29. *.open_cursors=300
  30. *.pga_aggregate_target=761266176
  31. *.processes=150
  32. *.remote_login_passwordfile='EXCLUSIVE'
  33. *.sga_max_size=4294967296
  34. *.sga_target=4294967296
  35. *.undo_management='AUTO'
  36. *.undo_tablespace='UNDOTBS1'
  37. *.user_dump_dest='/database/admin/wgods/udump'
  38. *.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. ios UIWebView 在开发中加载文件

    UIWebView 在实际应用中加载文件的时候,有两种情况, 1. 实行在线预览 , 2. 下载到本地,再查看 如果是第一种情况: NSURL *url = [NSURL URLWithString: ...

  2. EasyUI管理后台模板(附源码)

    下载地址:http://files.cnblogs.com/wyguo/easyui_demo.zip

  3. WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】

    http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...

  4. Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署

    本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...

  5. 学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言

    1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片. ...

  6. Effective java笔记(六),方法

    38.检查参数的有效性 绝大多数方法和构造器对于传递给它们的参数值都会有限制.如,对象引用不能为null,数组索引有范围限制等.应该在文档中指明所有这些限制,并在方法的开头处检查参数,以强制施加这些限 ...

  7. 编辑IL文件 修改DLL文件

    本文章只是技术探讨,学习,技术上的研究而已.请支持正版. 如:KS.Gantt.DLL 为例 使用ILSpy反编译 工具 利用ildasm反编译 KS.Gantt.dll  生成IL中间代码 一般会生 ...

  8. Spring MVC 处理静态资源文件

    摘要: 三个方案: 1.方案一:激活Tomcat的defaultServlet来处理静态文件 2.方案二: 在spring3.0.4以后版本提供了mvc:resources (需要配置annotati ...

  9. c语言 sizeof理解

    1.基本数据类型 char :1     short:2   int 4    long 4   long long :8    float:4    double :8字节. 2.数组:对应的基本数 ...

  10. samba共享服务

    方法一 1.安装samba:可以先检查下是否已经安装:rpm -qa | grep samba,没有的话自己安装下,这里介绍下基于RPM包的一种在线安装模式yumyum是一种快速安装模式,它会自动解决 ...