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指定 | 可以 | 不可以 |
Created: 2019-06-22 Sat 19:35