Oracle 参数文件
Table of Contents
- 1. 为什么会有spfile
- 2. 指定参数文件启动实例
- 3. 查看实例是哪种参数文件启动
- 4. spfile 与pfile互相转换
- 5. 查看spfile的内容
- 6. 修改spfile中的参数值
- 7. SPFILE和PFILE的对比
1 为什么会有spfile
在数据库运行期间修改pfile,系统只会把参数写入内存,不会写入磁盘,若想将修改的参 数固定到磁盘,必须在DB关闭以后手动修改pfile文件。由此,引入了spfile,因为它是二 进制文件,其内容结构都是有Oracle设定,所以很容易由Oracle直接对其进行读取和修改。 通过指定scope的值就可决定参数的存储方式。
2 指定参数文件启动实例
oracle实例在启动时,会去读取参数文件中的各配置项,其过程如下所述: 若数据库的startup命令指定了pfile,那么Oracle直接读取指定的pfile(但不 能指定spfile)。 若使用不带pfile 子句的startup 命令,Oracle 将从由平台指定的默认位置上的服务器参数文件(spfile)中读取初始化参数。 Oracle查找参数文件的顺序是:在平台指定的默认位置上,Oracle首先查找名为spfile$ORACLE_SID.ora的文件,如果没有就查找spfile.ora文件,还没有的话,就找init$ORACLE_SID.ora文件。 在$ORACLE_BASE\admin \db_name\spfile下,你很可能可以看到一个类似这样init.ora.1 92003215317]名字的文件,这就是初始化参数文件,只是跟上了时间戳(你可以去掉这个长后缀,就是标准的pfile文件了)。对于Oracle9.2以后的版本 ,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据PFILE文件创建而来。 对于Windows NT 和Windows 2000 ,其位置是: $ORACLE_HOME\dbs\spfile$ORACLE_SID.ora。(oracle11gR2,以前的版本就不说了)
指定参数文件启动实例:
startup pfile='$ORACLE_HOME/dbs/pfileSID.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%\DATABASE\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
<style></style>