设为首页 收藏本站
查看: 958|回复: 0

[经验分享] 探索Oracle pfile和spfile的秘密

[复制链接]

尚未签到

发表于 2016-7-21 12:52:00 | 显示全部楼层 |阅读模式
  判断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


自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; -----该参数支持动态修改,所以就立即生效了

  System 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>
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247450-1-1.html 上篇帖子: Oracle RESETLOGS 和 NORESETLOGS 区别说明 下篇帖子: oracle复合索引介绍(多字段索引)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表