在i 以前Oracle 使用pfile 存储初始化参数配置这些参数在实例启动时被读取任何
修改需要重起实例才能生效使用spfile 您能够使用ALTER SYSTEM 或ALTER SESSION
来动态修改那些可动态修改的参数任何更改能够立即生效您能够选择使更改只应用于当前实
例还是同时应用到spfile这就使得任何对spfile 的修改都能够在命令行完成我们能够完全
告别手工修改初始化参数文档这就大大减少了人为错误的发生
SPFILE 是个二进制文档能够使用RMAN 进行备份这样实际上Oracle 把参数文档也
纳入了备份恢复管理
除了第一次启动数据库需要PFILE(然后能够根据PFILE 创建SPFILE)我们能够不再需
要PFILEORACLE 强烈推荐使用spfile应用其新特性来存储和维护初始化参数配置
一 创建SPFILE
缺省的ORACLE 使用PFILE 启动数据库SPFILE 必须由PFILE 创建新创建的SPFILE
在下一次启动数据库时生效CREATE SPFILE 需要SYSDBA 或SYSOPER 的权限
语法如下
CREATE SPFILE[=SPFILENAME] FROM PFILE[=PFILENAME]
例
SQL> create spfile from pfile;
缺省的spfile 创建到系统缺省目录
(Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME\database)
假如SPFILE 已存在那么创建会返回以下错误
SQL> create spfile from pfile;
create spfile from pfile
*
ERROR 位于第 行:
ORA: 无法创建已由例程使用的SPFILE
这也能够用来判断当前是否使用了SPFILE 文档
然而意外的时Oracle 并没有向其他文档相同在运行期间保持锁定让我们作以下试验
SQL> host rename SPFILEEYGLENORA SPFILEEYGLENORABAK
SQL> alter system set db_cache_size=M scope=both;
系统已更改
SQL> host dir *ora
驱动器E 中的卷是Doc
卷的序列号是CEFF
E:\Oracle\OraiR\database 的目录
: PWDeyglenORA
个文档 字节
个目录 可用字节
SQL> alter system set db_cache_size=M scope=spfile;
alter system set db_cache_size=M scope=spfile
*
ERROR 位于第 行:
ORA: 无法打开文档
OSD: 无法打开文档
O/SError: (OS ) 系统很难找到指定的文档
SQL> host rename SPFILEEYGLENORABAK SPFILEEYGLENORA
SQL> alter system set db_cache_size=M scope=spfile;
系统已更改
SQL>
估计Oracle 以后会想办法来锁定这个文档
二 使用SPFILE
重新启动数据库使用startup 命令Oralce 将会按照以下顺序在缺省目录中搜索参
数文档
a spfile${ORACLE_SID}ora
缺省目录UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database
b spfileora
缺省目录UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database
c init${ORACLESID}ora
缺省目录UNIX: ${ORACLE_HOME}/dbs/
NT: ${ORACLE_HOME}\database or
${ORACLE_HOME}\admin\db_name\pfile\
创建了spfile重新启动数据库Oracle 会按顺序搜索以上目录spfile 就会自动生效
三 使用pfile/spfile 启动数据库
假如您想使用pfile 启动数据库您能够在启动时指定pfile 或删除spfile
SQL> startup pfile=E:\Oracle\admin\eyglen\pfile\initora;
您不能以同样的方式指定spfile但是能够创建一个包含spfile 参数的pfile 文档指向
spfile
SPFILE 是个自Oraclei 引入的初始化参数类似于IFILE 参数SPFILE 参数用于定
义非缺省路径的spfile 文档
您能够在PFILE 链接到SPFILE 文档同时在PFILE 中定义其他参数假如参数重复配置
后读取的参数将取代先前的配置
PFILE 参数的使用例如:
这是我们使用SPFILE 启动的情况
SQL> startup
ORACLE 例程已启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
数据库已打开
SQL> show parameter log_archive_start
NAME TYPE
VALUE
log_archive_start boolean
TRUE
SQL> show parameter spfile
NAME TYPE
VALUE
spfile string
%ORACLE_HOME%\DATABASE\SPFILE%
ORACLE_SID%ORA
SQL>
我们修改PFILE 文档内容如下
#Pfile link to SPFILE
SPFILE= E:\Oracle\OraiR\database\SPFILEEYGLENORA
log_archive_start = false
能够预见这个log_archive_start 参数配置将会代替SPFILE 中的配置
SQL> startup pfile=e:\initeyglenora
ORACLE 例程已启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
数据库已打开
SQL> show parameter spfile
NAME TYPE
VALUE
spfile string
E:\Oracle\OraiR\database\SPF
ILEEYGLENORA
SQL> show parameter log_archive_start
NAME TYPE
VALUE
log_archive_start boolean
FALSE
然后我们能够使用ALTER SYSTEM 方式将修改固定到SPFILE
SQL> alter system set log_archive_start=false scope=spfile;
系统已更改
所以您也能够通过如上方式在启动时修改初始化参数比我们在本文最后介绍的导入导
出方法要简便的多
四 修改参数
能够通过ALTER SYSTEM 或导入导出来更改SPFILE 的内容
ALTER SYSTEM 增加了一个新选项SCOPESCOPE 参数有三个可选值
MEMORY SPFILE BOTH
MEMORY:只改变当前实例运行
SPFILE:只改变SPFILE 的配置
BOTH:改变实例及SPFILE
SCOPE=MEMORY
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
TRUE
SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=MEMORY;
系统已更改
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
FALSE
SQL> shutdown immediate
数据库已关闭
已卸载数据库
ORACLE 例程已关闭
SQL> startup
ORACLE 例程已启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
数据库已打开
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
TRUE
SCOPE=SPFILE
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
TRUE
SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=SPFILE;
系统已更改
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
TRUE
SQL> shutdown immediate
数据库已关闭
已卸载数据库
ORACLE 例程已关闭
SQL> startup
ORACLE 例程已启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
数据库已打开
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
FALSE
SQL>
. SCOPE = BOTH
使用BOTH 选项实际上等同于不带参数的ALTER SYSTEM 语句
注意假如修改静态参数那么需要指定SPFILE 参数否则将会报错
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
FALSE
SQL> ALTER SYSTEM SET timed_statistics=TRUE SCOPE=BOTH;
系统已更改
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
TRUE
SQL> shutdown immediate
数据库已关闭
已卸载数据库
ORACLE 例程已关闭
SQL> startup
ORACLE 例程已启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
数据库已打开
SQL> show parameter timed_statistics
NAME TYPE
VALUE
timed_statistics boolean
TRUE
SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH;
ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH
*
ERROR 位于第 行:
ORA: 无法修改指定的初始化参数
SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=SPFILE;
系统已更改
.您也能够在数据库shutdown 时创建和修改spfile例如
SQL> show sga
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
SQL> shutdown immediate
数据库已关闭
已卸载数据库
ORACLE 例程已关闭
SQL> create pfile from spfile;
文档已创建
SQL> create spfile from pfile;
文档已创建
SQL>
五 是否使用了spfile
判断是否使用了SPFILE能够使用以下方法
.查询v$parameter 动态视图假如以下查询返回空值那么您在使用pfile
SQL> SELECT namevalue FROM v$parameter WHERE name=spfile;
NAME
VALUE
spfile
%ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%ORA
.或您能够使用SHOW 命令来显示参数配置假如以下结果value 列返回空值那
么说明您在使用pfile:
SQL> SHOW PARAMETER spfile
NAME TYPE
VALUE
spfile string
%ORACLE_HOME%\DATABASE\SPFILE%
ORACLE_SID%ORA
.查询v$spparameter 视图
假如以下查询返回 值表示您在使用pfile否则表明您使用的是spfile:
SQL> SELECT COUNT(*) FROM v$spparameter WHERE value IS NOT NULL;
COUNT(*)