oracle的引數檔案 pfile和spfile
在oracle資料庫中,引數檔案包含了所有的資料庫配置資訊,它非常重要。如果要把oracle管理好,必須要做到對引數及引數檔案的瞭如指掌。但是,oracle資料庫中據是龐大的,且正因為引數檔案包含了資料庫的所有配置資訊,所以引數很多,有幾百個之多,一時是難以熟悉和掌握的,這需要在實踐中的配置,瞭解和領會。有關各個引數的詳細參考資訊,請參閱oracle官方文件《Oracle9i Database Reference》。
一、引數檔案說明
主要說明引數檔案的定義、功用、動作原理、分類,以及如何修改引數。
1.引數檔案的定義、作用
oracle資料庫通過一系列引數來對資料庫進行配置。這些引數是以鍵-值對的形式來表
MAXLOGFILES=50
BACKGROUND_DUMP_DEST=C:/DUMP
其中,等號左邊是引數名,右邊是對應的引數的值,值的型別有多種,典型的如數字和字串.
引數檔案就是儲存這些引數的地方,oracle在啟動時會從引數檔案中讀取相關的配置。
2.引數檔案的分類
在9i之前,引數檔案只有一種,它是文字格式的,稱為pfile,在9i及以後的版本中,新增了伺服器引數檔案,稱為spfile,它是二進位制格式的。這兩種引數檔案都是用來儲存參數配置以供oracle讀取的,但也有不同點,注意以下幾點:
第一,pfile是文字檔案,spfile是二進位制檔案;
第二,對於引數的配置,
第三,pfile配置改變後,要使用其生效,必須重新啟動資料庫,spfile的配置生效時限和作用域可以由修改引數的sql命令指定,可以立即生效,也可以不立即生效。當然有些引數的修改必須重啟資料庫才能生效;
第四,可用sql命令由pfile建立spfile,也可以由spfile建立pfile;
第五,如果是手動建立資料庫而不是通過DBCA,則開始建立資料庫時,你只能定義pfile 。因為它是文字格式的;
第六,oracle資料庫只使用一個引數檔案,要麼是pfile,要麼是spfile,即麼如何判斷
3.引數檔案的動作原理
oracle例項在啟動時,會去讀取引數檔案中的配置,這個過程是這樣的:
資料庫的startup命令中可以指定以哪個pfile來啟動,但是請注意,只能指定pfile,不能指定spfile。
當使用不帶pfile 子句的startup 命令時,Oracle 將從平臺指定的預設位置上的伺服器引數檔案(spfile)中讀取初始化引數。Oracle查詢spfile或者創通的init.ora的順序是:在平臺指定的預設位置上,Oracle首先查詢名為spfile$ORACLE_SID.ora的檔案,如果沒有就查詢spfile.ora檔案,還沒有的話,就找init$ORACLE_SID.ora檔案。
在$ORACLE_BASE/admin/db_name/spfile下,你很可能可以看到一個類似這樣init.ora.1 92003215317]名字的檔案,這就是初始化引數檔案,只是跟上了時間戳。對於Oracle920 ,預設的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據這個檔案建立而來,你可以去掉這個長字尾,就是標準的pfile檔案了。
對於Windows NT 和Windows 2000,其位置是:$ORACLE_HOME/database/spfile$ORACLE_SID.ora。
資料庫在啟動後,引數的配置值可以通過查詢資料字典v$parameter得到。
4.引數檔案的修改方法
分為手動修改和線上修改。
手動修改用於修改pfile,直接用文字編輯開啟pfile修改。要使用修改生效,須重啟資料庫。
線上修改是在資料庫執行時,用alter system命令進行修改,命令如下(詳細的命令語句請參考oracle官方參考文件):
alter system set parameter = value <comment=’text’><deferred><scope=memory | spfile | both><sid=’SID’|*>。Comment好理解是為該引數指定註釋;deferred是指定修改之在下次啟動例項時再生效;scope指定修改應用的範圍,可以僅僅是記憶體中,那麼就不需要寫入SPFILE,下次例項啟動時,修改就被丟棄,可以是寫入SPFILE中,但並不立即應用到當前例項中,下次啟動例項時再生效,both選項(預設選項)就是指定立即生效並且寫入SPFILE中;sid指定修改應用的例項,如果指定*(預設選項),則是應用到所有例項。
sql>alter system set job_queue_processed=50 scope=MEMORY
注意,scope=MEMORY表示應用範圍,取值如下:
SPFILE:修改只對SPFILE有效,不影響當前例項,需要重啟資料庫才能生效;
MEMORY:修改只對記憶體有效,即只對當前例項有效,且立即生效,但不會儲存到SPFILE, 資料庫重啟後此配置丟失;
BOTH:顧名思義,包含以上兩種,立即生效,且永久生效。
對於ALTER SYSTEM的引數修改命令,請注意以下幾點:
第一,如果當前例項使用的是pfile而非spfile,則scope=spfile或scope=both會產生錯誤;
第二,如果例項以pfile啟動,則scope的預設值為MEMORY,若以spfile啟動,則預設值為 BOTH;
第三,可以使用DEFERRED表示所作修改只適用於將來的會話,還可以使用COMMENT寫入注釋,如:ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 註釋"
第四,刪除引數的方法如下:ALTER SYSTEM SET PARAMETER='';
alter system reset <PARAMETER_NAME> scope=both sid=’*’
5.建立引數檔案
對於pfile,你可以用文字編輯器直接手工編輯一個,也可以使用create pfile命令從spfile建立,如:CREATE PFILE='C:/PFILE/MYPFILE.ORA' FROMSPFILE='D:/SPFILE/MYSPFILE.ORA',或者從當前例項所使用的spfile建立:createpfile='c:/pfile/mypfile.ora' from spfile。
建立spfile的命令如下:CREATE SPFILE FROM PFILE='C:/PFILE/MYPFILE'。
注意:
Oracle例項啟動時,讀取引數檔案的優先順序如下:spfileSID.oraàDefault SPFILEàinitSID.ora。由此也看出Oracle也有限選擇使用SPFILE。不過我們也可以在執行startup命令時手工指定PFILE檔案:startup PFILE=$ORACLE_HOME/dbs/initORCL.ora。不能手工指定SPFILE,不過可以這樣處理,新建一個PFILE,在PFILE檔案中指定SPFILE=$ORACLE_HOME/database/mySPFILE.ora。然後在startup命令中指定PFILE為剛才建立的PFILE。