Oracle 参数文件
Oracle 参数文件
Table of Contents
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
Select isspecified,count(*) from v$spparameter group by isspecified;
如果isspecified里有true,表明用spfile进行了指定配置;如果全为false,则表明用pfile启动。
-
方法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读取的,但也有不同点。
对比项 | pfile | spfile |
---|---|---|
文件类型 | 文本文件 | 二进制文件 |
命名规则 | init<ORACLE_SID>.ora | spfile<ORACLE_SID>.ora |
默认存放目录 | $ORACLE_HOME/dbs | $ORACLE_HOME/dbs |
编辑方式 | vi 等文本处理命令直接编译 | 必须在数据库启动后,通过sql命令进行在线修改 |
配置生效方式 | 重启实例 | spfile配置改变后的生效时限和作用域可由修改参数的sql命令指定,可以立即生效,也可以指定deferred使其在下次登录时再生效。当然有些参数的修改必须重启数据库才能生效。 |
startup指定 | 可以 | 不可以 |
Created: 2019-06-22 Sat 19:35
===================
天行健,君子以自强不息
地势坤,君子以厚德载物
===================