ORACLE初始化參數文件概述
在9i之前,參數文件只有一種,它是文本格式的,稱為pfile,在9i及以后的版本中,新增了服務器參數文件,稱為spfile,它是二進制格式的。這兩種參數文件都是用來存儲參數配置以供oracle讀取的,但也有不同點,注意以下幾點:
1)pfile是文本文件,spfile是二進制文件;
2)對於參數的配置,pfile可以直接以文本編輯器打開手工配置,而spfile不行,必須在數據庫啟動后,通過sql命令進行在線修改,當然spfile也可用文本編輯器打開,把里面文本的內容復制出來放在pfile中,但絕對不可以直接修改,直接修改后會使文件無法讀取。
3)pfile配置改變后,要使用其生效,必須重新啟動數據庫,spfile的配置生效時限和作用域可以由修改參數的sql命令指定,可以立即生效,也可以不立即生效。當然有些參數的修改必須重啟數據庫才能生效;
4)可以用sql命令由pfile創建spfile,也可以由spfile創建pfile;
5)如果是手動創建數據庫而不是通過DBCA,則開始創建數據庫時,你只能定義pfile。因為它是文本格式的;
現在一般普通生產庫都采用spfile啟動數據庫,pfile確實沒有用的理由了,感覺只有以下情況才會使用pfile:
1)入門學習時,為了理解初始化參數
2)創建數據庫時,因為這時還沒spfile
3)恢復數據庫時
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課程提供的參考資料
