探索Oracle pfile和spfile的秘密

                                                                                     判断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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值