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查找参数文件的顺序是:在平台指定的默认位置上,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.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.ora缺省PFILE文件来创建SPFILE, SPFILE也放在$ORACLE_HOME/dbs目录下,缺省名为spfile.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 = , 那么此参数只适用于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.ora
spfile.ora
默认存放目录
$ORACLE_HOME/dbs
$ORACLE_HOME/dbs
编辑方式
vi 等文本处理命令直接编译
必须在数据库启动后,通过sql命令进行在线修改
配置生效方式
重启实例
spfile配置改变后的生效时限和作用域可由修改参数的sql命令指定,可以立即生效,也可以指定deferred使其在下次登录时再生效。当然有些参数的修改必须重启数据库才能生效。
startup指定
可以
不可以
Author: halberd.lee
Created: 2019-06-22 Sat 19:35
标签:文件,pfile,spfile,ORACLE,参数,Oracle,ora
来源: https://www.cnblogs.com/halberd-lee/p/11070091.html