在9i以前,參數文件只有一種,它是文本格式的,稱爲pfile,在9i及之後的版本中,新增了服務器參數文件,稱爲spfile,它是二進制格式的。這兩種參數文件都是用來存儲參數配置以供oracle讀取的,但也有不一樣點,注意如下幾點:linux
1)pfile是文本文件,spfile是二進制文件;sql
2)對於參數的配置,pfile能夠直接以文本編輯器打開手工配置,而spfile不行,必須在數據庫啓動後,經過sql命令進行在線修改,固然spfile也可用文本編輯器打開,把裏面文本的內容複製出來放在pfile中,但絕對不能夠直接修改,直接修改後會使文件沒法讀取。數據庫
3)pfile配置改變後,要使用其生效,必須從新啓動數據庫,spfile的配置生效時限和做用域能夠由修改參數的sql命令指定,能夠當即生效,也能夠不當即生效。固然有些參數的修改必須重啓數據庫才能生效;windows
4)能夠用sql命令由pfile建立spfile,也能夠由spfile建立pfile;服務器
5)若是是手動建立數據庫而不是經過DBCA,則開始建立數據庫時,你只能定義pfile。由於它是文本格式的;session
如今通常普通生產庫都採用spfile啓動數據庫,pfile確實沒有用的理由了,感受只有如下狀況纔會使用pfile:oracle
1)入門學習時,爲了理解初始化參數編輯器
2)建立數據庫時,由於這時還沒spfile學習
3)恢復數據庫時unix
4)採用RAC的生產庫中若是要共用spfile,能夠建一個初始的pfile,而後在pfile指定spfile爲共享設備文件
...............
2.建立spfile和pfile語法
l 建立SPFILE(只能建在數據庫所在的機器上)
CREATE SPFILE [= 'spfile_name'] FROM PFILE [= 'pfile_name'];
若是命令中未指定spfile的路徑則會在缺省路徑建立spfile文件(%ORACLE_HOME%/database/spfile<SID>.ora)
這個與spfile參數無關(rac中共享spfile時要注意)
l 建立PFILE
CREATE PFILE [= 'pfile_name'] FROM SPFILE [= 'spfile_name'];
若是命令中未指定spfile的路徑則會從缺省路徑(%ORACLE_HOME%/database/spfile<SID>.ora)建立pfile文件
注:語法中建立和指定的spfile和pfile都是服務器路徑
注:不能建立已經由數據庫實例啓動的spfile(在nomount狀態下也不行)
3.數據庫啓動時spfile和pfile的加載順序
初始化參數是在數據庫實例啓動時(startup nomount)加載。
若是startup命令中未指定pfile參數,在windows系統中數據庫啓動時會按以下順序查找啓動參數文件:
%ORACLE_HOME%/database/SPFILE<SID>.ora
%ORACLE_HOME%/database/SPFILE.ora
%ORACLE_HOME%/database/init<SID>.ora
在unix或linux系統中數據庫啓動時會按以下順序查找啓動參數文件:
%ORACLE_HOME%/dbs/SPFILE<SID>.ora
%ORACLE_HOME%/dbs/SPFILE.ora
%ORACLE_HOME%/dbs/init<SID>.ora
也就是說先找spfile<sid>.ora文件,若是spfile<sid>.ora沒有,則找spfile.ora文件,最後纔會去找init<sid>.ora的pfile文件。
使用指定pfile啓動數據庫則數據庫會使用指定的pfile來加載數據庫參數:
命令以下:
startup pfile='<pfile>'
注:以pfile啓動的實例,修改初始化參數時不能使用scope=spfile的語法。
若是參數文件(無論是pfile仍是spfile)中指定了spfile的參數,則還會從指定的spfile中再讀取配置的參數,這樣數據庫的參數就包括了兩個文件的內容。
4.數據庫啓動參數的加載順序
加載順序按文件中順序讀取
若是文件中有兩個相同的參數名則以最後出現的爲準,如下例子說明了這個問題。
若有一個spfile文件(myspfile.ora),包括兩個參數:
sessions=150
processes=200
另外有一個pfile文件(mypfile.ora),裏面包括三個參數,其中指定了spfile爲前面的spfile文件
processes=100
sessions=100
spfile='myspfile.ora'
processes=180
當使用mypfile.ora啓動數據庫時,會按以下順序讀取參數
1)processes=100
2) sessions=100
3) spfile='myspfile.ora'
3.1) sessions=150(從新加載)
3.2) processes=200(從新加載)
4)processes=180(再次從新加載)
最後加載的數據庫參數爲
sessions=150
spfile='myspfile.ora'
processes=180
5.關於show parameter spfile時顯示的內容
若是是採用pfile指定了spfile參數,則顯示指定的spfile
若是是採用缺省的spfile啓動,則顯示缺省的spfile文件名,無論spfile還有沒有指定其它的spfile文件。
6.關於spfile遞歸調用
若是出現spfile遞歸調用,則ORACLE啓動時會報錯:
SQL> startup nomount;
ORA-03113: 通訊通道的文件結束
SQL>
spfile遞歸調用就是指
spfile1.spfile='spfile2'
spfile2.spfile='spfile1'
這樣的參數配置
7.初始化參數的修改方法
分爲手動修改和在線修改。
手動修改用於修改pfile,直接用文本編輯打開pfile修改。要使用修改生效,須重啓數據庫。
在線修改是在數據庫運行時,用alter system命令進行修改,命令以下(詳細的命令 語句請參考oracle官方參考文檔):
alter system set parameter_name = parameter_value [, parameter_value ]...
[ COMMENT 'text' ]
[ DEFERRED ]
[ SCOPE = { MEMORY | SPFILE | BOTH } ]
[ SID = { 'sid' | * } ]
注:
[ COMMENT 'text' ] :表示能夠加註釋,如 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 2008-05-19"
[ DEFERRED ]:表示所做修改只適用於未來的會話,對當前已有的會話不影響,這個參數只對少數參數有用,具體可以使用的參數能夠查看v$parameter視圖
select * from v$parameter where issys_modifiable='DEFERRED'
[ SCOPE = { MEMORY | SPFILE | BOTH } ]:
SPFILE:修改只對SPFILE有效,不影響當前實例,須要重啓數據庫才能生效;
MEMORY:修改只對內存有效,即只對當前實例有效,且當即生效,但不會保存到SPFILE, 數據庫重啓後此配置丟失;
BOTH:顧名思義,包含以上兩種,當即生效,且永久生效。
全部的參數均可以使用spfile,部份參數能夠使用memory,能夠使用以下SQL查詢不能使用memory方式修改的參數
select * from v$parameter where issys_modifiable='FALSE'
對於ALTER SYSTEM的參數修改命令,請注意如下幾點:
1)若是當前實例使用的是pfile而非spfile,則scope=spfile或scope=both會產生錯誤;
2)若是實例以pfile啓動,則scope的默認值爲MEMORY,若以spfile啓動,則默認值爲BOTH;
[ SID = { 'sid' | * } ]
指定修改參數的做用實例號,若是爲*則表示全部實例,這個選項用於RAC數據庫
8.刪除初始化參數:
alter system reset parameter_name
[ SCOPE = { MEMORY | SPFILE | BOTH } ]
[ SID = 'sid' ]
對於有些參數也能夠使用 ALTER SYSTEM SET PARAMETER=''達到相同的效果;
9.初始化參數的相關係統視圖
9.v$parameter
9.v$parameter2
9.v$system_parameter
9.v$system_parameter2
9.gv$parameter
9.gv$parameter2
9.gv$system_parameter
9.gv$system_parameter2
SQL> desc v$parameter;
出處:交大Oracle課程提供的參考資料