Oracle 參數文件


Oracle 參數文件

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. 方法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     
    

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指定 可以 不可以

Author: halberd.lee

Created: 2019-06-22 Sat 19:35

Validate


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM