自Oracle 9i之后启动的时候默认使用的初始化文件是spfile,咱们能够经过以下三种方式来判断是SPFILE仍是PFILE方式启动数据库。
一、show parameter spfile
二、show parameter pfile
三、看v$spparameter视图
一、经过查看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参数文件的路径。
二、经过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>