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