Oracle的參數檔案對於Oracle至關重要。沒有參數檔案。Oracle無法啟動。
參數檔案分為
spfile檔案,oracle9iR1之後新增的參數檔案,為二進位檔案,不可以直接編輯
pfile檔案,文字檔,可以直接編輯,
這兩種檔案可以相互轉換。
一:使用參數檔案啟動oracle
對於Oracle而且預設讀取的順序為:
1.1:優先讀取:spfile啟動oracle,讀取的檔案為:
$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
1.2:如果不存在檔案spfile$ORACLE_SID.ora,則讀取另一個spfile檔案:
$ORACLE_HOME/dbs/spfile.ora
1.3:當前面兩個檔案均不存在時。則讀取pfile檔案啟動。pfile檔案為:
$ORACLE_HOME/dbs/init$ORACLE_SID.ora
在某些狀態下,可能需要指定pfile的啟動方式,可以手工指定pfile來啟動oracle資料庫.方式為:
1.4:有一個合法的pfile檔案,但是不符合oracle的預設讀取命令以及路徑,則使用
plsql>startup pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'
1.5:對於用於啟動oracle的指定pfile檔案,其內容還可以採用如下方式
initest2.ora的內容為:
IFILE='/u1/app/oracle/product/10.2.0/db_1/pfile/init.ora'
IFILE 指令與 C 中的#include 很類似。它會在當前檔案中包含指定檔案的內容。前面的指令就會包含一個非預設位置上的 init.ora 檔案。
當使用:plsql>startup pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'來啟動資料庫時。就表示其實使用的
pfile檔案為:'/u1/app/oracle/product/10.2.0/db_1/pfile/init.ora'
1.6:pfile檔案還可以重新導向到spfile檔案。initest2.ora的內容為:
#Pfile link to SPFILE
SPFILE= '/u1/app/oracle/product/10.2.0/db_1/spfile123.ora'
log_archive_start = false
則使用plsql>startup pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'來啟動資料庫時。會使用spfile123.ora來啟動資料庫,並且pfile中指定的
參數log_archive_start = false 會覆蓋spfile123.ora中的相同指定參數值。
該狀況主要可用於一種狀況,如:由於誤操作。導致修改了Spfile中的sga_target=2147483648,超過了系統的記憶體限制。會導致啟動失敗。
此時。可以使用pfile,並在pfile中指定spfile檔案。以及附加參數sga_target=524288000. 這樣就可以啟動了。
二,參數檔案的修改:
2.A:pfile檔案可以直接用文字編輯器進行修改
2.B:spfile檔案的修改在oracle中使用命令
Alter system set parameter=value <comment='text'> <deferred> <scope=memory|spfile|both> <sid='sid|*'>
註:<>內的部分為可選
2.1 對於<comment='text'>,用於DBA更新參數檔案時。添加註釋。便於追蹤參數的修改曆史
例如:alter system set pga_aggregate_target=775M comment='Update by harvey test 2 2010-4-28';
則:可查詢v$parameter中的UPDATE_COMMENT欄位。對於參數pga_aggregate_target記錄會有所更新的注釋
另:經過實驗表明。對於同一個參數的多次修改。僅會保留其最後一次的修改注釋,如果最後一次沒有指定注釋資訊,
則UPDATE_COMMENT會為空白。
2.2:deferred 指定系統修改是否只對以後的會話生效(對當前建立的會話無效,包括執行此修
改的會話)。預設情況下,ALTER SYSTEM 命令會立即生效,但是有些參數不能“立即”修改,只
能為建立立的會話修改這些參數。可以使用以下查詢來看看哪些參數要求必須使用 deferred:
select name from v$parameter where ISSYS_MODIFIABLE = 'DEFERRED';
2.3:<scope=memory|spfile|both> ,memory表示僅對當前運行執行個體生效,並不修改spfile。spfile表示僅修改spfile,當前執行個體不改變
both表示修改spfile並對當前運行執行個體生效。預設如果不指定scope,則取值為both
註:當指定pfile啟動資料庫時。則預設該選項為:memory。指定both,spfile均為提示錯誤:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup
2.4:<sid='sid|*'> 主要用於叢集環境;預設值為 sid='*'。這樣可以為叢集中任何給定的執行個體惟
一地指定參數設定。除非你使用 Oracle RAC,否則一般不需要指定 sid=設定,但是下面的2.5項例外
2.5: 取消 SPFILE 中的值設定---即我們根本不希望 SPFILE 有這個參數設定,想把它刪掉,使用如下命令:
Alter system reset parameter <scope=memory|spfile|both> sid='sid|*'
注意:此處 SID=部分不再是可選的,必須指定sid才可以修改。
三:參數檔案的轉換:
3.1:pfile轉換為spfile,
3.1.1:當使用預設的pfile檔案$ORACLE_HOME/dbs/init$ORACLE_SID.ora 啟動oracle時。命令如下;
create spfile from pfile; 預設產生的spfile為:$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
3.1.2:當使用非預設的pfile檔案啟動時。必須指定pfile的完整路徑名:
create spfile from pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'
註:還可以指定產生的spfile的路徑和名稱:create spfile='/u1/app/oracle/product/10.2.0/db_1/dbs/abc.ora' from pfile;
3.2: spfile轉換為pfile.
3.2.1僅在當時用spfile啟動oracle時。使用create pfile from spfile,得到的pfile為預設pfile
3.2.2:可以採用strings $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 命令直接提取spfile中的常值內容
3.3:不論採用pfile或者spfile啟動oracle,在啟動之後,均可以採用
create pfile='xyz' from spfile='abc' 或者 create spfile='abc' from pfile='xyz' 來實現pfile和spfile的轉換
四,spfile被破壞時的處理:
4.1:可以採用strings $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 命令直接提取spfile中的常值內容產生pfile
4.2:如果沒有pfile,則可以讀取alter日誌的內容。產生pfile
4.3:使用pfile來啟動後。產生spfile。
原文連結:http://space.itpub.net/180324/viewspace-661625