博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE的SPFILE与PFILE
阅读量:5817 次
发布时间:2019-06-18

本文共 5738 字,大约阅读时间需要 19 分钟。

     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.  
  3.  

    2.2 方法二

方法2
  1. SQL> show parameter spfile
  2.  
  3.         NAME                 TYPE            VALUE
  4. ------------------------ ----------- ------------------------------
  5.       spfile                 string      /database/product/dbhome_1/dbs/spfilewgods.ora
  6.  
  7. SQL> show parameter pfile
  8.  
  9.         NAME                   TYPE          VALUE
  10. ------------------------ ----------- ------------------------------
  11.       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.  
  3.      NAME                TYPE     VALUE
  4. -------------------------------- ----------- -----------
  5.      spfile             string
  6. SQL> show parameter pfile;
  7.  
  8.      NAME                TYPE     VALUE
  9. -------------------------------- ----------- -----------
  10.      spfile             string
  11. SQL>

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

 

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

 

 

 

 

 

 

转载地址:http://iyhbx.baihongyu.com/

你可能感兴趣的文章
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
poj3692
查看>>
python之信号量【Semaphore】
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
WCF
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
Android实例-录音与回放(播放MP3)(XE8+小米2)
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>