Oracle 引數檔案
Oracle 引數檔案
Table of Contents
1 為什麼會有spfile
在資料庫執行期間修改pfile,系統只會把引數寫入記憶體,不會寫入磁碟,若想將修改的參 數固定到磁碟,必須在DB關閉以後手動修改pfile檔案。由此,引入了spfile,因為它是二 進位制檔案,其內容結構都是有Oracle設定,所以很容易由Oracle直接對其進行讀取和修改。 通過指定scope的值就可決定引數的儲存方式。
2 指定引數檔案啟動例項
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';
3 檢視例項是哪種引數檔案啟動
-
方法1
Select isspecified,count(*) from v$spparameter group by isspecified;
如果isspecified裡有true,表明用spfile進行了指定配置;如果全為false,則表明用pfile啟動。
-
方法2
show parameters spfile
NAME TYPE VALUE -------- --------- ---------------------------------------------------------------- spfile string <ORACLE_HOME>/dbs/SPFILE<ORACLE_SID>.ORA
如果有類似上面的顯示,那麼你的資料庫就是在spfile下啟動的,而pfile啟動的資料庫,其輸出如下,其value值是空的。
NAME TYPE VALUE ---------- ----------- ------------------------------ spfile string
4 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;
5 檢視spfile的內容
(1) 先spfile檔案轉換成pfile,再用vi檢視pfile的內容;(切記切記!一定要先轉換成pfile檔案,再檢視或者用vi命令來編輯)
(2) 使用V$PARAMETER檢視查詢引數值;
(3) 使用Linux的Strings命令,提取二進位制檔案spfile中可讀的字串,並將其顯示出來:“Strings spfileSID.ora | more”
(4) SQL*PLUS命令:show parameter。
6 修改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=’*’是必寫的
7 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指定 | 可以 | 不可以 |