Oracle中的pfile和spfile详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中的pfile和spfile详解相关的知识,希望对你有一定的参考价值。
参考技术A在 i 以前 Oracle 使用pfile 存储初始化参数配置 这些参数在实例启动时被读取 任何
修改需要重起实例才能生效 使用spfile 您能够使用ALTER SYSTEM 或ALTER SESSION
来动态修改那些可动态修改的参数 任何更改能够立即生效 您能够选择使更改只应用于当前实
例还是同时应用到spfile 这就使得任何对spfile 的修改都能够在命令行完成 我们能够完全
告别手工修改初始化参数文档 这就大大减少了人为错误的发生
SPFILE 是个二进制文档 能够使用RMAN 进行备份 这样实际上Oracle 把参数文档也
纳入了备份恢复管理
除了第一次启动数据库需要PFILE(然后能够根据PFILE 创建SPFILE) 我们能够不再需
要PFILE ORACLE 强烈推荐使用spfile 应用其新特性来存储和维护初始化参数配置
一 创建SPFILE
缺省的 ORACLE 使用PFILE 启动数据库 SPFILE 必须由PFILE 创建 新创建的SPFILE
在下一次启动数据库时生效 CREATE SPFILE 需要SYSDBA 或SYSOPER 的权限
语法如下
CREATE SPFILE[= SPFILE NAME ] FROM PFILE[= PFILE NAME ]
例
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 SPFILEEYGLEN ORA SPFILEEYGLEN ORA BAK
SQL> alter system set db_cache_size= M scope=both;
系统已更改
SQL> host dir * ora
驱动器E 中的卷是Doc
卷的序列号是 C EFF
E:\\Oracle\\Ora iR \\database 的目录
: PWDeyglen ORA
个文档 字节
个目录 可用字节
SQL> alter system set db_cache_size= M scope=spfile;
alter system set db_cache_size= M scope=spfile
*
ERROR 位于第 行:
ORA : 无法打开文档
OSD : 无法打开文档
O/S Error: (OS ) 系统很难找到指定的文档
SQL> host rename SPFILEEYGLEN ORA BAK SPFILEEYGLEN ORA
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 spfile ora
缺省目录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\\init ora ;
您不能以同样的方式指定spfile 但是能够创建一个包含spfile 参数的pfile 文档 指向
spfile
SPFILE 是个自Oracle i 引入的初始化参数 类似于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\\Ora iR \\database\\SPFILEEYGLEN ORA
log_archive_start = false
能够预见这个log_archive_start 参数配置将会代替SPFILE 中的配置
SQL> startup pfile= e:\\initeyglen ora
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\\Ora iR \\database\\SPF
ILEEYGLEN ORA
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 增加了一个新选项 SCOPE SCOPE 参数有三个可选值
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 name value 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;
lishixinzhi/Article/program/Oracle/201311/17305
判断ORACLE启动时使用spfile还是pfile
自Oracle 9i以后启动的时候默认使用的初始化文件是spfile,我们可以通过如下三种方式来判断是SPFILE还是PFILE方式启动数据库。
1、show parameter spfile
2、show parameter pfile
3、看v$spparameter视图
1、通过查看spfile、pfile视图
用spfile启动数据库:
SQL> show parameter pfile;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
spfile string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\SPFILEWWL.ORA
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
spfile string C:\ORACLE\PRODUCT\10.2.0\DB_1\
DATABASE\SPFILEWWL.ORA
用pfile启动数据库
SQL> startup pfile=c:\initwwl.ora
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 2066080 bytes
Variable Size 385878368 bytes
Database Buffers 1207959552 bytes
Redo Buffers 14708736 bytes
Database mounted.
Database opened.
SQL> col type format a8
SQL> show parameter pfile;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
spfile string
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
spfile string
SQL>
我们在这里可以很明显的发现,使用spfile启动数据库,在查看show parameter pfile和show parameter spfile 都能看到spfile参数文件的路径。
反之使用pfile启动的数据库,我们无论是查看show parameter pfile还是show parameter spfile 都无法看到pfile参数文件的路径。
2、通过v$spparameter视图
使用spfile启动数据库,我们可以看到查询出来的结果是spfile
SQL> select decode(count(*),1,‘spfile‘,‘pfile‘) from v$spparameter where rownum=1 and isspecified = ‘TRUE‘;
DECODE(COUNT
------------
spfile
使用pfile启动数据库,我们可以看到查询出来的结果是pfile。
SQL> select decode(count(*),1,‘spfile‘,‘pfile‘) from v$spparameter where rownum=1 and isspecified =‘TRUE‘;
DECODE(COUNT
------------
pfile
以上是关于Oracle中的pfile和spfile详解的主要内容,如果未能解决你的问题,请参考以下文章