Oracle 参数文件

Oracle 参数文件

1 为什么会有spfile

在数据库运行期间修改pfile,系统只会把参数写入内存,不会写入磁盘,若想将修改的参 数固定到磁盘,必须在DB关闭以后手动修改pfile文件。由此,引入了spfile,因为它是二 进制文件,其内容结构都是有Oracle设定,所以很容易由Oracle直接对其进行读取和修改。 通过指定scope的值就可决定参数的存储方式。

2 指定参数文件启动实例

oracle实例在启动时,会去读取参数文件中的各配置项,其过程如下所述: 若数据库的startup命令指定了pfile,那么Oracle直接读取指定的pfile(但不 能指定spfile)。 若使用不带pfile 子句的startup 命令,Oracle 将从默认位置上参数文件(spfile)中读取初始化参数。 Oracle查找参数文件的顺序是:spfile->pfile->init.ora. Oracle首先查找名为spfile<ORACLE_SID>.ora的文件,如果没有就查找pfile(init<ORACLE_SID>.ora)文件,还没有的话,就找init<ORACLE_SID>.ora文件。 在$ORACLE_HOME/dbs/下,你可以看到一个类似这样init.ora名字的文件,这就是初始化参数文件。对于Oracle9.2以后的版本 ,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据PFILE文件创建而来。 对于Windows NT 和Windows 2000 ,其位置是: $ORACLE_HOME\dbs\spfile<ORACLE_SID>.ora。(oracle11gR2,以前的版本就不说了)

指定参数文件启动实例:

startup pfile='$ORACLE_HOME/dbs/init<ORACLE_SID>.ora ';
startup spfile='$ORACLE_HOME/dbs/spfile<ORACLE_SID>.ora';

3 查看实例是哪种参数文件启动

  1. 方法1

    Select isspecified,count(*)
    from v$spparameter
    group by isspecified;  
    

    如果isspecified里有true,表明用spfile进行了指定配置;如果全为false,则表明用pfile启动。

  2. 方法2

    show parameters spfile 
    
        NAME      TYPE        VALUE
    -------- --------- ----------------------------------------------------------------
    spfile      string   <ORACLE_HOME>/dbs/SPFILE<ORACLE_SID>.ORA
    

    如果有类似上面的显示,那么你的数据库就是在spfile下启动的,而pfile启动的数据库,其输出如下,其value值是空的。

          NAME      TYPE        VALUE
    ---------- ----------- ------------------------------
    spfile       string     
    

4 spfile 与pfile互相转换

  • 通过spfile创建pfile

    create pfile='$ORACLE_HOME/dbs/initSID.ora' from spfile='$ORACLE_HOME/dbs/spfileSID.ora';
    create pfile='$ORACLE_HOME/dbs/initSID.ora' from spfile;   
    
  • 通过pfile创建spfile

    create spfile='$ORACLE_HOME/dbs/spfileSID.ora ' from pfile='$ORACLE_HOME/dbs/initSID.ora ';
    create spfile from pfile;    
    

    默认情况下,系统使用$ORACLE_HOME/dbs/init<ORACLE_SID>.ora缺省PFILE文件来创建SPFILE, SPFILE也放在$ORACLE_HOME/dbs目录下,缺省名为spfile<ORACLE_SID>.ora

  • 查看spfile位置

    show parameter spfile;  
    

5 查看spfile的内容

(1) 先spfile文件转换成pfile,再用vi查看pfile的内容;(切记切记!一定要先转换成pfile文件,再查看或者用vi命令来编辑) 

  (2) 使用V$PARAMETER视图查找参数值;

(3) 使用Linux的Strings命令,提取二进制文件spfile中可读的字符串,并将其显示出来:“Strings spfileSID.ora | more”

  (4) SQL*PLUS命令:show parameter。

6 修改spfile中的参数值

alter system set parameter=value sid='*' scope=spfile;

6.1 scope

memory
修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE,数据库重启后此配置丢失;
spfile
修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效r;
both
包含以上两种,立即生效,且永久生效(缺省)。

同时需要注意的是memory 和both 虽然修改内存中的参数值,但对已经存在的会话是无效的。

6.2 sid

用于RAC系统(用在单实例也没有问题),不同的SID分别指定不同的实例。若是 sid = <ORAVLE_SID> , 那么此参数只适用于SID对应的实例;若是sid = '*',则 此参数适用于所有实例。

对于ALTER SYSTEM的参数修改命令,请注意以下几点: 1)如果当前实例使用的是pfile而非spfile,则scope=spfile或scope=both会产生错误。 2)如果实例以pfile启动,则scope的默认值为MEMORY;若以spfile启动,则默认值为BOTH。 3)删除参数的方法如下:ALTER SYSTEM SET PARAMETER=''。

6.3 恢复spfile中参数的缺省值

alter system reset parameter scope=both sid=“*”; //此时的sid=’*’是必写的   

7 SPFILE和PFILE的对比

在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新 增了服务器参数文件,称为spfile,它是二进制格式的。这两种参数文件都是用来存储参 数配置以供oracle读取的,但也有不同点。

对比项pfilespfile
文件类型 文本文件 二进制文件
命名规则 init<ORACLE_SID>.ora spfile<ORACLE_SID>.ora
默认存放目录 $ORACLE_HOME/dbs $ORACLE_HOME/dbs
编辑方式 vi 等文本处理命令直接编译 必须在数据库启动后,通过sql命令进行在线修改
配置生效方式 重启实例 spfile配置改变后的生效时限和作用域可由修改参数的sql命令指定,可以立即生效,也可以指定deferred使其在下次登录时再生效。当然有些参数的修改必须重启数据库才能生效。
startup指定 可以 不可以

Author: halberd.lee

Created: 2019-06-22 Sat 19:35

Validate

posted @ 2019-06-22 19:35  halberd.lee  阅读(1858)  评论(0编辑  收藏  举报