1. 程式人生 > 其它 >Oracle 引數檔案

Oracle 引數檔案

Oracle 引數檔案

Table of Contents

為什麼會有spfile

在資料庫執行期間修改pfile,系統只會把引數寫入記憶體,不會寫入磁碟,若想將修改的參 數固定到磁碟,必須在DB關閉以後手動修改pfile檔案。由此,引入了spfile,因為它是二 進位制檔案,其內容結構都是有Oracle設定,所以很容易由Oracle直接對其進行讀取和修改。 通過指定scope的值就可決定引數的儲存方式。

指定引數檔案啟動例項

oracle例項在啟動時,會去讀取引數檔案中的各配置項,其過程如下所述: 若資料庫的startup命令指定了pfile,那麼Oracle直接讀取指定的pfile(但不 能指定spfile)。 若使用不帶pfile 子句的startup 命令,Oracle 將從預設位置上引數檔案(spfile)中讀取初始化引數。 Oracle查詢引數檔案的順序是:spfile->pfile->init.ora. Oracle首先查詢名為spfile<ORACLE_SID>.ora的檔案,如果沒有就查詢pfile(init<ORACLE_SID>.ora)檔案,還沒有的話,就找init<ORACLE_SID>.ora檔案。 在$ORACLE_HOME/dbs/下,你可以看到一個類似這樣init.ora名字的檔案,這就是初始化引數檔案。對於Oracle9.2以後的版本 ,預設的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據PFILE檔案建立而來。 對於Windows NT 和Windows 2000 ,其位置是: $ORACLE_HOME\dbs\spfile<ORACLE_SID>.ora。(oracle11gR2,以前的版本就不說了)

指定引數檔案啟動例項:

startup pfile='$ORACLE_HOME/dbs/init<ORACLE_SID>.ora ';
startup spfile='$ORACLE_HOME/dbs/spfile<ORACLE_SID>.ora';

檢視例項是哪種引數檔案啟動

  1. 方法1

    Select isspecified,count(*)
    from v$spparameter
    group by isspecified;  
    

    如果isspecified裡有true,表明用spfile進行了指定配置;如果全為false,則表明用pfile啟動。

  2. 方法2

    show parameters spfile 
    
        NAME      TYPE        VALUE
    -------- --------- ----------------------------------------------------------------
    spfile      string   <ORACLE_HOME>/dbs/SPFILE<ORACLE_SID>.ORA
    

    如果有類似上面的顯示,那麼你的資料庫就是在spfile下啟動的,而pfile啟動的資料庫,其輸出如下,其value值是空的。

          NAME      TYPE        VALUE
    ---------- ----------- ------------------------------
    spfile       string     
    

spfile 與pfile互相轉換

  • 通過spfile建立pfile

    create pfile='$ORACLE_HOME/dbs/initSID.ora' from spfile='$ORACLE_HOME/dbs/spfileSID.ora';
    create pfile='$ORACLE_HOME/dbs/initSID.ora' from spfile;   
    
  • 通過pfile建立spfile

    create spfile='$ORACLE_HOME/dbs/spfileSID.ora ' from pfile='$ORACLE_HOME/dbs/initSID.ora ';
    create spfile from pfile;    
    

    預設情況下,系統使用$ORACLE_HOME/dbs/init<ORACLE_SID>.ora預設PFILE檔案來建立SPFILE, SPFILE也放在$ORACLE_HOME/dbs目錄下,預設名為spfile<ORACLE_SID>.ora

  • 檢視spfile位置

    show parameter spfile;  
    

檢視spfile的內容

(1) 先spfile檔案轉換成pfile,再用vi檢視pfile的內容;(切記切記!一定要先轉換成pfile檔案,再檢視或者用vi命令來編輯) 

  (2) 使用V$PARAMETER檢視查詢引數值;

(3) 使用Linux的Strings命令,提取二進位制檔案spfile中可讀的字串,並將其顯示出來:“Strings spfileSID.ora | more”

  (4) SQL*PLUS命令:show parameter。

修改spfile中的引數值

alter system set parameter=value sid='*' scope=spfile;

6.1 scope

memory
修改只對記憶體有效,即只對當前例項有效,且立即生效,但不會儲存到SPFILE,資料庫重啟後此配置丟失;
spfile
修改只對SPFILE有效,不影響當前例項,需要重啟資料庫才能生效r;
both
包含以上兩種,立即生效,且永久生效(預設)。

同時需要注意的是memory 和both 雖然修改記憶體中的引數值,但對已經存在的會話是無效的。

6.2 sid

用於RAC系統(用在單例項也沒有問題),不同的SID分別指定不同的例項。若是 sid = <ORAVLE_SID> , 那麼此引數只適用於SID對應的例項;若是sid = '*',則 此引數適用於所有例項。

對於ALTER SYSTEM的引數修改命令,請注意以下幾點: 1)如果當前例項使用的是pfile而非spfile,則scope=spfile或scope=both會產生錯誤。 2)如果例項以pfile啟動,則scope的預設值為MEMORY;若以spfile啟動,則預設值為BOTH。 3)刪除引數的方法如下:ALTER SYSTEM SET PARAMETER=''。

6.3 恢復spfile中引數的預設值

alter system reset parameter scope=both sid=“*”; //此時的sid=’*’是必寫的   

SPFILE和PFILE的對比

在9i之前,引數檔案只有一種,它是文字格式的,稱為pfile,在9i及以後的版本中,新 增了伺服器引數檔案,稱為spfile,它是二進位制格式的。這兩種引數檔案都是用來儲存參 數配置以供oracle讀取的,但也有不同點。

對比項 pfile spfile
檔案型別 文字檔案 二進位制檔案
命名規則 init<ORACLE_SID>.ora spfile<ORACLE_SID>.ora
預設存放目錄 $ORACLE_HOME/dbs $ORACLE_HOME/dbs
編輯方式 vi 等文字處理命令直接編譯 必須在資料庫啟動後,通過sql命令進行線上修改
配置生效方式 重啟例項 spfile配置改變後的生效時限和作用域可由修改引數的sql命令指定,可以立即生效,也可以指定deferred使其在下次登入時再生效。當然有些引數的修改必須重啟資料庫才能生效。
startup指定 可以 不可以