ORACLE初始化參數文件概述


ORACLE初始化參數文件概述

 

在9i之前,參數文件只有一種,它是文本格式的,稱為pfile,在9i及以后的版本中,新增了服務器參數文件,稱為spfile,它是二進制格式的。這兩種參數文件都是用來存儲參數配置以供oracle讀取的,但也有不同點,注意以下幾點:

 

1)pfile是文本文件,spfile是二進制文件;

2)對於參數的配置,pfile可以直接以文本編輯器打開手工配置,而spfile不行,必須在數據庫啟動后,通過sql命令進行在線修改,當然spfile也可用文本編輯器打開,把里面文本的內容復制出來放在pfile中,但絕對不可以直接修改,直接修改后會使文件無法讀取。

3)pfile配置改變后,要使用其生效,必須重新啟動數據庫,spfile的配置生效時限和作用域可以由修改參數的sql命令指定,可以立即生效,也可以不立即生效。當然有些參數的修改必須重啟數據庫才能生效;

4)可以用sql命令由pfile創建spfile,也可以由spfile創建pfile;

5)如果是手動創建數據庫而不是通過DBCA,則開始創建數據庫時,你只能定義pfile。因為它是文本格式的;

 

現在一般普通生產庫都采用spfile啟動數據庫,pfile確實沒有用的理由了,感覺只有以下情況才會使用pfile:

1)入門學習時,為了理解初始化參數

2)創建數據庫時,因為這時還沒spfile

3)恢復數據庫時

4)采用RAC的生產庫中如果要共用spfile,可以建一個初始的pfile,然后在pfile指定spfile為共享設備文件

...............

 

2.創建spfile和pfile語法

l  創建SPFILE(只能建在數據庫所在的機器上)

CREATE SPFILE [= 'spfile_name'] FROM PFILE [= 'pfile_name'];

如果命令中未指定spfile的路徑則會在缺省路徑創建spfile文件(%ORACLE_HOME%/database/spfile<SID>.ora)

這個與spfile參數無關(rac中共享spfile時要注意)

l  創建PFILE

CREATE PFILE [= 'pfile_name'] FROM SPFILE [= 'spfile_name'];

如果命令中未指定spfile的路徑則會從缺省路徑(%ORACLE_HOME%/database/spfile<SID>.ora)創建pfile文件

 

注:語法中創建和指定的spfile和pfile都是服務器路徑

注:不能創建已經由數據庫實例啟動的spfile(在nomount狀態下也不行)

 

3.數據庫啟動時spfile和pfile的加載順序

初始化參數是在數據庫實例啟動時(startup nomount)加載。

如果startup命令中未指定pfile參數,在windows系統中數據庫啟動時會按如下順序查找啟動參數文件:

%ORACLE_HOME%/database/SPFILE<SID>.ora

%ORACLE_HOME%/database/SPFILE.ora

%ORACLE_HOME%/database/init<SID>.ora

在unix或linux系統中數據庫啟動時會按如下順序查找啟動參數文件:

%ORACLE_HOME%/dbs/SPFILE<SID>.ora

%ORACLE_HOME%/dbs/SPFILE.ora

%ORACLE_HOME%/dbs/init<SID>.ora

 

也就是說先找spfile<sid>.ora文件,如果spfile<sid>.ora沒有,則找spfile.ora文件,最后才會去找init<sid>.ora的pfile文件。

 

使用指定pfile啟動數據庫則數據庫會使用指定的pfile來加載數據庫參數:

命令如下:

startup pfile='<pfile>'

 

注:以pfile啟動的實例,修改初始化參數時不能使用scope=spfile的語法。

如果參數文件(不管是pfile還是spfile)中指定了spfile的參數,則還會從指定的spfile中再讀取配置的參數,這樣數據庫的參數就包括了兩個文件的內容。

 

4.數據庫啟動參數的加載順序

加載順序按文件中順序讀取

如果文件中有兩個相同的參數名則以最后出現的為准,以下例子說明了這個問題。

如有一個spfile文件(myspfile.ora),包括兩個參數:

sessions=150

processes=200

另外有一個pfile文件(mypfile.ora),里面包括三個參數,其中指定了spfile為前面的spfile文件

processes=100

sessions=100

spfile='myspfile.ora'

processes=180

當使用mypfile.ora啟動數據庫時,會按如下順序讀取參數

1)processes=100

2) sessions=100

3) spfile='myspfile.ora'

3.1) sessions=150(重新加載)

3.2) processes=200(重新加載)

4)processes=180(再次重新加載)

 

最后加載的數據庫參數為

sessions=150

spfile='myspfile.ora'

processes=180

5.關於show parameter spfile時顯示的內容

如果是采用pfile指定了spfile參數,則顯示指定的spfile

如果是采用缺省的spfile啟動,則顯示缺省的spfile文件名,不管spfile還有沒有指定其它的spfile文件。

6.關於spfile遞歸調用

如果出現spfile遞歸調用,則ORACLE啟動時會報錯:

SQL> startup nomount;

ORA-03113: 通信通道的文件結束

SQL>

spfile遞歸調用就是指

spfile1.spfile='spfile2'

spfile2.spfile='spfile1'

這樣的參數配置

 

7.初始化參數的修改方法

分為手動修改和在線修改。

手動修改用於修改pfile,直接用文本編輯打開pfile修改。要使用修改生效,須重啟數據庫。

在線修改是在數據庫運行時,用alter system命令進行修改,命令如下(詳細的命令 語句請參考oracle官方參考文檔):

alter system set parameter_name = parameter_value [, parameter_value ]...

[ COMMENT 'text' ]

[ DEFERRED ]

[ SCOPE = { MEMORY | SPFILE | BOTH } ]

[ SID = { 'sid' | * } ]

注:

[ COMMENT 'text' ] :表示可以加注釋,如 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 2008-05-19"

[ DEFERRED ]:表示所作修改只適用於將來的會話,對當前已有的會話不影響,這個參數只對少數參數有用,具體可使用的參數可以查看v$parameter視圖

select * from v$parameter where issys_modifiable='DEFERRED'

[ SCOPE = { MEMORY | SPFILE | BOTH } ]:

SPFILE:修改只對SPFILE有效,不影響當前實例,需要重啟數據庫才能生效;

MEMORY:修改只對內存有效,即只對當前實例有效,且立即生效,但不會保存到SPFILE, 數據庫重啟后此配置丟失;

BOTH:顧名思義,包含以上兩種,立即生效,且永久生效。

所有的參數都可以使用spfile,部份參數可以使用memory,可以使用如下SQL查詢不能使用memory方式修改的參數

select * from v$parameter where issys_modifiable='FALSE'

 

對於ALTER SYSTEM的參數修改命令,請注意以下幾點:

1)如果當前實例使用的是pfile而非spfile,則scope=spfile或scope=both會產生錯誤;

2)如果實例以pfile啟動,則scope的默認值為MEMORY,若以spfile啟動,則默認值為BOTH;

[ SID = { 'sid' | * } ]

指定修改參數的作用實例號,如果為*則表示所有實例,這個選項用於RAC數據庫

 

8.刪除初始化參數:

alter system reset parameter_name

[ SCOPE = { MEMORY | SPFILE | BOTH } ]

[ SID = 'sid' ]

對於有些參數也可以使用 ALTER SYSTEM SET PARAMETER=''達到相同的效果;

9.初始化參數的相關系統視圖

9.v$parameter

9.v$parameter2

9.v$system_parameter

9.v$system_parameter2

9.gv$parameter

9.gv$parameter2

9.gv$system_parameter

9.gv$system_parameter2

 

SQL> desc v$parameter;

 

出處:交大Oracle課程提供的參考資料


免責聲明!

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



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