Oracle学习,spfile

      唉,对Oracle的学习一直断断续续,我本身是做开发的,更多是从开发角度接触数据库。终于又开始继续学习了,希望别再中断了,呵呵。

 

      昨天正好看到spfile这部分,看了一些资料,做了一些实验,记录一下

      环境:Windows Server 2003 SP2,Oracle 10g release 10.2.0.1.0

 

      Oracle官方文档指出了pfile和spfile的默认位置,如下:

      UNIX/Linux中,默认存放路径是$ORACLE_HOME/dbs,或者和数据文件在同一个目录

      Windows中,默认存放路径是%ORACLE_HOME%/database

 

      我的测试环境是Windows Server 2003,自然默认路径应该是%ORACLE_HOME%/database

 

      但是发现在Windows上安装Oracle10g,默认在%ORACLE_HOME%/dbs/目录下有一个spfile,而%ORACLE_HOME%/database目录并没有这个文件。

      根据官方文档描述和实际查看,都说明这时Instance确实是使用spfile启动的,为啥这个目录和Oracle官方文档上说的不一样呢?

 

      在官方文档所说的%ORACLE_HOME%/database/目录下有一个pfile,打开一看,pfile的内容并不是参数设置,而是一个指向spfile的路径。

      Oracle10g安装后默认是使用spfile启动的。实际上经过试验,我觉得Oracle启动时确实是像官方文档所说的在%ORACLE_HOME%/database/目录下寻找spfile,因为没有找到,所以进而寻找pfile(这是Oracle寻找参数文件的顺序)。

      于是Oracle在默认路径下果然找到了pfile,但Oracle此时发现pfile中并不是参数设置,而是一个指向spfile的路径,Oracle按照这个路径果真找到了spfile,于是就使用spfile启动了Instance。以上是个人的理解。

      由此可知,spfile可以放在我们认为合适的目录中,只要能访问即可,然后在默认查找目录下放一个pfile,pfile的内容是一个指向spfile的路径即可让Oracle使用我们的spfile启动Instance。

     

      好,那么继续实验,数据库已经按照默认方式使用spfile启动完成

      C:/>sqlplus /nolog

      SQL>connect sys/sys as sysdba;

      SQL>show parameter spfile;

      可以看到spfile的路径,%ORACLE_HOME%/dbs/spfile<oracle_sid>.ora

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

      结果是SP

 

      这些都可以说明Oracle是使用spfile启动的

 

      SQL>create pfile from spfile;

      这时默认目录下的pfile不再是指向spfile的目录了,而是从spfile创建而来的参数设置。

      SQL>shutdown immediate;

      SQL>startup;

      数据库成功启动并打开

      SQL>show parameter spfile;

      可以看到spfile的路径那一列已经没有值了

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

      结果是P

     

      这些都可以说明Oracle是使用pfile启动的

 

      SQL>create spfile from pfile;

      文件成功创建,这时发现文件是创建在默认目录下的,而不是%ORACLE_HOME%/dbs/

      此时在默认目录下同时存在pfile和spfile,pfile中不再是指向spfile的路径了,而是参数设置(因为刚才执行过create pfile from spfile)

 

      SQL>shutdown immediate;

      SQL>startup;

      SQL>show parameter spfile;

      可以看到spfile的路径,%ORACLE_HOME%/database/spfile<oracle_sid>.ora

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

      结果是SP

 

      这些都可以说明Oracle是使用spfile启动的,而且是使用默认路径下的spfile启动的,而不是最初的%ORACLE_HOME%/dbs/路径下的spfile

 

      那么这就更明显了,正如Oracle官方文档所说,在windows上,Oracle的参数文件默认路径是%ORACLE_HOME%/database/。Oracle在这个路径下按照顺序搜索spfile、pfile,如果二者都没找到,Oracle Instance the startup will abort。

      至于在windows上为啥默认安装后,要把spfile放在%ORACLE_HOME%/dbs/中,而在默认路径下用pfile做一个到spfile的链接就不清楚了。这给了初学者一点点点点点的迷惑。

    

      当然如果需要,可以通过startup命令的选项使Oracle绕过spfile,而直接使用pfile启动Instance。

      例如 startup pfile=%ORACLE_HOME%/database/init<oracle_sid>.ora

 

      OK了,Oracle是如何使用参数文件启动的基本了解了一些。

 

      那么spfile和pfile有什么区别呢?

      1、spfile是由Oracle Server管理的,所以可通过alter system命令直接将对系统参数的修改固化在存储上,而alter system命令无法修改pfile

      2、spfile的主要部分存为二进制数据,所以不能直接编辑,而pfile则是纯文本的

      大概主要是这两个区别吧,至少目前来看就是这些了,呵呵

 

 

      sqlplus命令show parameters,显示目前正在使用的参数值,呵呵,看了一下,貌似比目前spfile文件中记录的参数多好多,而且大部分我还不知道具体作用,继续学习吧。

 

      视图v$parameter显示的是session级的参数,也就是当前session的参数信息。如果没有使用alter session单独设置当前session的参数值,那么默认和system级的参数应该是一样的。

      视图v$parameter2显示的内容和v$parameter是一致的,只是前者显示的格式可能更容易阅读一些。

 

      视图v$system_parameter显示的是system级的参数,保存的是使用alter system修改的值(scope=both或scope=memory)。这两个(v$parameter和v$system_parameter)都是当前已经生效的参数值。

 

      视图v$spparameter显示的就是保存在spfile中的参数值(scope=both或scope=spfile)。

 

      呵呵,目前对于spfile了解了一点了。继续学习中。。。。。。。

 

      2010-7-20

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值