博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断ORACLE启动时使用spfile还是pfile
阅读量:6785 次
发布时间:2019-06-26

本文共 5297 字,大约阅读时间需要 17 分钟。

 自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



自9i后,数据库默认使用spfile启动,但是我们也可以指定通过pfile的方式启动。而且pfile和spfile是可以互相转换的,并且转换的话要应用到数据库必须重启数据库。

从spfile创建pfile

SQL> create pfile from spfile;


File created.


从pfile创建spfile

SQL> create spfile from pfile;


File created.


如果在数据库的$ORACLE_HOME/dbs/目录下既有spfile又有pfile,使用spfile启动数据库,不需要指定参数文件路径(因为数据库会优先选择spfile启动),使用pfile启动,则需指定完整路径,如实例1。如果参数文件不在$ORACLE_HOME/dbs/目录下,无论是通过spfile或pfile启动均需要指定完整路径。

实例1:

SQL> startup pfile=$ORACLE_HOME/dbs/initorcl.ora

ORACLE instance started.


Total System Global Area 422670336 bytes

Fixed Size 1300352 bytes

Variable Size 306186368 bytes

Database Buffers 109051904 bytes

Redo Buffers 6131712 bytes

Database mounted.

Database opened.


SQL> show parameter spfile;


NAME TYPE VALUE

------------------------------------ ---------- ------------------------------

spfile string


SQL> show parameter pfile;


NAME TYPE VALUE

------------------------------------ ---------- ------------------------------

spfile string




show parameter spfile和show parameter pfile结果仍然一样,此时spfile的值为NULL了。




SQL> select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified = 'TRUE';


DECODE(COUNT

------------

pfile


spfile和pfile的区别


就Oracle的spfile和pfile的区别主要是spfile的修改是可以在线的,而pfile的修改必须关闭数据库,到参数文件所在路径下通过vi或记事本等文本编辑工具修改。(因为参数文件里面的内容太多,编辑起来容易导致错误的编辑到其它的参数,从而导致数据库无法起来,所以在9i以前一般都是要备份pfile后再来做参数的修改,而且修改任何参数都需要停库,非常的不方便;在9i以后的spfile就可以同通过命令修改指定的参数了,而且有很多参数都不用重启数据库,能够在线生效,这个在线生效的参数会随着数据库的版本增高而增加。如果参数修改有问题数据库起不来了可以在nomount状态下创建成pfile再修改回来即可。)

修改spfile参数的三种模式:

scope=both 立即并永久改变,(默认模式)

scope=spfile 下次启动执行新的改变。

scope=memory 立即临时改变下次启动新参数失效


spfile 修改的方法:

SQL> alter system set processes = 100 scope=both; ----该参数不支持动态修改,必须修改完后重启数据库
alter system set processes = 100 scope=both
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

-------------------------------------------------------------------------------------------------------------------------------

SQL> show parameter pga;

NAME TYPE VALUE
------------------------------------ -------- ------
pga_aggregate_target big inte 798M
ger
SQL> alter system set pga_aggregate_target = 500m scope=both; -----该参数支持动态修改,所以就立即生效了

S
ystem altered.

SQL> show parameter pga;

NAME TYPE VALUE
------------------------------------ -------- ------
pga_aggregate_target big inte 500M
ger
SQL>


SQL> alter system set processes = 100 scope=spfile; ----修改完后重启数据库能生效,不信你试试。

System altered.

SQL> alter system set pga_aggregate_target = 700m scope=spfile; ----当然也可以选择数据库下次启动的时候生效。

System altered.


SQL> alter system set processes = 100 scope=memory; ----因为该参数不支持动态修改,同样也就无法实现立即生效,下次启动失效。
alter system set processes = 100 scope=memory

*

ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL>

SQL> alter system set pga_aggregate_target = 600m scope=memory; ---因为该参数支持动态修改,当然也就可以实现立即生效,下次启动失效咯。

System altered.

SQL>


如果使用的是pfile则无法通过命令进行修改,会报ORA-02095或32001错误。

SQL> alter system set processes = 100;
alter system set processes = 100
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL> alter system set processes = 100 scope=spfile;
alter system set processes = 100 scope=spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup


SQL> alter system set processes = 100 scope=both;
alter system set processes = 100 scope=both
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL> alter system set processes = 100 scope=memory;
alter system set processes = 100 scope=memory
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL>

本文转自 abc3486389 51CTO博客,原文链接:http://blog.51cto.com/1336014/1348303

转载地址:http://yvdgo.baihongyu.com/

你可能感兴趣的文章
swfit学习函数
查看>>
UML状态机
查看>>
Java过滤器,SpringMVC拦截器之间的一顺序点关系
查看>>
决心书
查看>>
linux系统管理之存储管理
查看>>
组播RPF 逆向路径转发 实验原理
查看>>
Centos 定时重启 Tomcat
查看>>
java i++
查看>>
linux运维基础篇 unit10
查看>>
linux运维基础篇 unit12
查看>>
俯身倾耳以请
查看>>
程序猿们_你是从头学起_还是半路出家的
查看>>
关于缓存的基础概念
查看>>
智能合约语言 Solidity 教程系列8 - Solidity API
查看>>
机器学习、深度学习、和AI算法可以在网络安全中做什么?
查看>>
JAVA 基础部分易混淆问题总结
查看>>
优化linux的内核来提高nginx并发
查看>>
Python包管理器
查看>>
关于微信投票如何防止出现微信上投票怎样刷票的技术
查看>>
OpenGL学习之glBindTexture函数
查看>>