讀《Oracle 9i&10g程式設計藝術》記錄--- spfile

season0891發表於2010-07-01
用startup命令來啟動,oracle 搜尋引數配置檔案的順序是:    
    a. spfile${ORACLE_SID}.ora 
    b. .ora
    c. init${ORACLESID}.ora
    d. init.ora

SPFILE是二進位制檔案,它們可不能用文字編輯器來編 輯。使用ALTER SYSTEM命令可進行引數修改,語法如下(< > 中的部分是可選的,其中的管道符號(|)表示“取候選列表中的一個選項”):
Alter system set parameter=value  
預設情況下,ALTER SYSTEM SET命令會更新當前執行的例項,並且會修改SPFILE,這就大大簡化了;原先使用init.ora引數檔案時,透過ALTER SYSTEM命令設定引數後,如果忘記更新init.ora引數檔案,或者把init.ora引數檔案丟失了,就會產生問題,使用SPFILE則會消除這 些問題。
記住這一點,下面來詳細分析這個命令中的各個元素:
? parameter=value這個賦值提供了引數名以及引數的新值。例如,pga_aggregate_target = 1024m會把PGA_AGGREGATE_TARGET引數值設定為1,024 MB(1 GB)。
? comment='text'是一個與此引數設定相關的可選註釋。這個註釋會出現在V$PARAMETER檢視的UPDATE_COMMENT欄位中。如 果使用了相應選項允許同時儲存對SPFILE的修改,註釋會寫入SPFILE,而且即便伺服器重啟也依然保留,所以將來重啟時會 看到這個註釋。
? deferred指定系統修改是否只對以後的會話生效(對當前建立的會話無效,包括執行此修改的會話)。預設情況下,ALTER SYSTEM命令會立即生效,但是有些引數不能“立即”修改,只能為新建立的會話修改這些引數。可以使用以下查詢來看看哪些引數要求必須使用 deferred:
ops$tkyte@ORA10G> select name
2 from v$parameter
3 where ISSYS_MODIFIABLE = 'DEFERRED';
NAME
------------------------------
backup_tape_io_slaves
audit_file_dest
object_cache_optimal_size
object_cache_max_size_percent
sort_area_size
sort_area_retained_size
olap_page_pool_size
7 rows selected.
上面的表明,SORT_AREA_SIZE可以在系統級修改,但是必須以延遲方式修改。以下程式碼顯示了有deferred 選項和沒有deferred選項時修改這個引數的值會有什麼結果:
ops$tkyte@ORA10G> alter system set sort_area_size = 65536;
alter system set sort_area_size = 65536
                              *
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this option
ops$tkyte@ORA10G> alter system set sort_area_size = 65536 deferred;
System altered.
? SCOPE=MEMORY|SPFILE|BOTH指示了這個引數設定的“作用域”。設定引數值時作用域有以下選擇:
? SCOPE=MEMORY只在例項中修改;資料庫重啟後將不再儲存。下一次重啟資料庫時,設定還是修改前的樣子。
? SCOPE=SPFILE只修改SPFILE中的值。資料庫重啟並再次處理SPFILE之前,這個修改不會生效。有些引數只能使用這個選項來修改,例 如,processes引數就必須使用SCOPE=SPFILE,因為我們無法修改活動例項的processes值。
? SCOPE=BOTH是指,記憶體和SPFILE中都會完成引數修改。這個修改將反映在當前例項中,下一次重啟時,這個修改也會生效。這是使用SPFILE 時預設的作用域值。如果使用init.ora引數檔案,預設值則為SCOPE=MEMORY,這也是此時惟一合法的值。
? sid='sid|*'主要用於叢集環境;預設值為sid='*'。這樣可以為叢集中任何給定的例項惟一地指定引數設定。除非你使用Oracle ,否則一般不需要指定sid=設定。
這個命令的 典型用法很簡單:
ops$tkyte@ORA10G> alter system set pga_aggregate_target=1024m;
System altered.
或者,更好的做法是,還可以指定 COMMENT=賦值來說明何時以及為什麼執行某個修改。

如果需要刪除修改的引數值,也透過ALTER SYSTEM命令來完成,但是要使用RESET子句:
Alter system reset parameter sid='sid|*'
在這裡,SCOPE/SID 設定的含義與前面一樣,但是SID=部分不再是可選的。要從SPFILE“刪除”引數設定,也就是仍然採用引數原來的預設值,就要使用這個命令。所以,舉 例來說,如果我們想刪除SORT_AREA_SIZE,以允許使用此前指定的預設值,可以這樣做:
sys@ORA10G> alter system reset sort_area_size scope=spfile sid='*';
System altered.
這 樣會從SPFILE中刪除SORT_AREA_SIZE。

spfile轉換為pfile檔案使用命令:
create pfile from spfile;
pfile轉換為spfile檔案使用:
create spfile from pfile;

SPFILE 中的二進位制資料量很小。
如果在UNIX平臺上,只需一個簡單的strings命令就能提取出所有設定:
strings spfile$ORACLE_SID.ora
在Windows上,則要用write.exe(WordPad,即寫字板)開啟這個檔案。\\

come from :http://space.itpub.net/110321/viewspace-609910

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-666880/,如需轉載,請註明出處,否則將追究法律責任。

相關文章