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. 介绍一个很爽的 php 字符串特定检索函数---strpos()

    大家在用 php 开发的时候 是否 有遇到过,对于一个获取的字符串,如果想要特定检测它是否 含有某个特定的字符或者子字符串,总是找不到好方法,或者根本做不到,迫于无奈而使用foreach. 函数: s ...

  2. 1Z0-053 争议题目解析709

    1Z0-053 争议题目解析709 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 709.A database has three online redo log groups w ...

  3. java读写file

    private static String encoding = "utf-8"; public static void readTxt(String filePath) thro ...

  4. TF-IDF提取行业关键词

    1. TF-IDF简介 TF-IDF(Term Frequency/Inverse Document Frequency)是信息检索领域非常重要的搜索词重要性度量:用以衡量一个关键词\(w\)对于查询 ...

  5. 通过Redux源码学习基础概念一:简单例子入门

    最近公司有个项目使用react+redux来做前端部分的实现,正好有机会学习一下redux,也和小伙伴们分享一下学习的经验. 首先声明一下,这篇文章讲的是Redux的基本概念和实现,不包括react- ...

  6. Xamarin.Android和UWP之MVVM的简单使用(一)

    0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...

  7. IIS实现反向代理

    http://www.cnblogs.com/dreamer-fish/p/3911953.html C#实现: C#写的一个反向代理,可以缓存 https://www.oschina.net/cod ...

  8. 在Hibernate框架中详谈一级缓存

    在学习Hibernate的过程中我们肯定会碰上一个名词---缓存,一直都听说缓存机制是Hibernate中的一个难点,它分为好几种,有一级缓存,二级缓存和查询缓存 今天呢,我就跟大家分享分享我所理解的 ...

  9. WCF的Restful和TCP方式调用性能比较

    1. 实验背景关于WCF提供分布式访问服务,最常用的两种方式Restful方式和Tcp方式,在本地测试了一把.结果显示,还是Rest方式,在压力测试下,性能最佳.而且处于跨平台的考虑,和自动化测试方便 ...

  10. NanUI for Winform 使用示例【第一集】——山寨个代码编辑器

    NanUI for Winform从昨天写博客发布到现在获得了和多朋友的关注,首先感谢大家的关注和支持!请看昨天本人的博文<NanUI for Winform发布,让Winform界面设计拥有无 ...