1.參數文件
與Oracle數據庫相關的參數文件有很多,但是最重要的是數據庫的參數文件,如果沒有這個參數文件,甚至無法啓動數據庫。
數據庫的參數文件通常稱爲初始化文件(init file),或init.ora文件。這是因爲歷史上它的默認名就是init<ORACLE_SID>.ora。這所以稱爲“歷史上”的默認名,原因是Oracle Database 9i Release 1 以來,對於存儲數據庫的參數設置,引入了一個很大改進的新方法:服務器參數文件(server parameter file),簡稱爲SPFILE。這個文件的默認名爲spfile<ORACLE_SID>.ora。
如果沒有參數文件,就無法啓動Oracle數據庫。所有參數文件相當重要,到了Oracle Database 9i Release 2(9.2及以上版本),備份和恢復工具——恢復管理器(Recovery Manager,RMAN)認識到了這個文件的重要性,允許把服務器參數文件包括在備份集中(而不是遺留的init.ora參數文件類型)。不過由於init.ora參數文件中是一個純文本文件,可以用任何文本編輯器創建,所以這個文件不需要你花大力氣去“保衛”。只要知道文件中的內容,完全可以重新創建(例如,如果能訪問數據庫的警告日誌,就可以從中獲得參數文件的信息)。
1.1 什麼是參數
簡單地說,可以把數據庫參數想成是一個鍵/值對。如db_name參數,可以簡單的存儲爲db_name=orcl,這裏的“鍵”是db_name,“值”是orcl。要得到一個實例參數的當前值,可以查詢V$視圖V$PARAMETER。另外,還可以在SQL*Plus中使用 SHOW PARAMETER命令來查看。
sys@ORCL>select value from v$parameter where name='db_block_size';
VALUE
--------------------------------------------------------------------------------------------------
8192
sys@ORCL>show parameter db_block_s
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
db_block_size integer 8192
v$parameter能夠得到更多的信息,但show parameter命令更簡單,而且還會自動“通配”,上邊中輸入了db_block_s,自動在前面和後面加了%。
注意:不同版本的Oracle上,參數個數會不同,不同的操作系統上可能也會增加另外的參數。
可以用兩種方式來設置各個參數值:只設置當前實例的參數值或永久性的設置。要確保參數文件包含你期望的值,使用遺留的init.ora參數文件時,這是一個手動過程。要永久的修改一個參數值(即使服務器重啓這個新設置也有效),就必須手動地編輯和修改init.ora參數文件。如果是服務器參數文件,則只需要一條命令就能輕鬆完成。
1.2 init.ora參數文件
這個文件的命名約定默認爲:
init$ORACLE_SID.ora (Unix enviroment variable)
init%ORACLE_SID%.ora (Windows enviroment variable)
默認存放的目錄
$ORACLE_HOME/dbs (Unix)
%ORACLE_HOME%\DATABASE (Windows)
參數文件不必放在特定的位置上。啓動一個實例時,可以在啓動命令上使用pfile=filename選項。
1.3 服務器參數文件
在訪問和維護實例參數設置方面,SPFILE是Oracle做出的一個重要改變。有了SPFILE,可以消除傳統參數文件存在的兩個嚴重問題。
可以杜絕參數文件的繁殖。SPFILE問題存儲在數據庫服務器上;必須存在於服務器主機本身,不能放在客戶機上。參參數設置來說,這樣就可以有一個“信息來源”。
無需在數據庫之外使用文本編輯器手動地維護參數文件(實際上,更確切的說法是不能手動地維護)。利用ALTER SYSTEM命令,完全可以直接將值寫入SPFILE。管理員不必手動的查找和維護所有參數文件。
這個文件的命名約定默認爲:
$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora (Unix environment variable)
%ORACLE_HOME%\database\spfile%ORACLE_SID%.ora (Windows environment variable)
強烈使用默認位置,否則會影響SPFILE的簡單性。如果不在默認位置,就必須告訴Oracle去哪裏找SPFILE。
1.轉換爲SPFILE
假設有一個數據庫,使用了inti.ora參數文件,轉換爲SPFILE非常簡單,使用CREATE SPFILE命令。
假設使用init.ora參數文件,而且這個init.ora參數文件確實在服務器的默認位置上,那麼只需要發出CREATE SPFILE命令,並重啓實例就行了。
從指定目錄中的init.ora參數文件中創建SPFILE使用:create spfile from pfile='/path/to/init.ora';
在集羣環境中,通過使用Oracle RAC,所有實例共享同一個SPFILE,這個SPFILE可以包含所有參數設置,甚至各個實例特有的設置都可以放在這一個SPFILE中。 所有實例共享的參數設置都以*.開頭。單個實例特有的參數設置都以實例名(Oracle SID)爲前綴。
2.設置SPFILE中的參數值
SPFILE是二進制文件,它們不能用文本編輯器來編輯,在linux上可以使用strings命令查看內容。要修改參數值就需要使用ALTER SYSTEM命令。語法如下
alter system set parameter = value <comment='text'> <deferred> <scope=memory|spfile|both> <sid='sid|*'>
默認情況下,ALTER SYSTEM SET命令會更新當前運行的實例,並且修改SPFILE,即默認爲scope=both。
parameter=value 這個賦值提供了參數名以及參數的新值。例如,pga_aggregate_target=1024M 會把pga_aggregate_target參數設置爲1024MB。
comment='text 是一個與此參數設置相關的可選註釋。這個註釋會出現在V$PARAMETER視圖的UPDATE_COMMENT字段中。如果使用了相應選項允許同時保存對SPFILE的修改,註釋會寫入SPFILE,而且即便服務器重啓也依然保留,所以將來重啓數據庫時會看到這個註釋。
deferred 指定系統修改是否只對以後的會話生效(對當前建立的會話無效,包括執行些修改的會話)。默認情況下,ALTER SYSTEM命令會立即生效,但有些參數不能“立即”修改,只能爲新建立的會話修改這些參數。使用select name from v$parameter where issys_modifiable='DEFERRED';查詢哪些參數必須使用deferred。
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='*'。
3.取消SPFILE中的值設置
如果想從SPFILE中刪除某個參數設置,則需要使用ALTER SYSTEM命令的RESET子句來執行。
alter system reset parameter <scope=memory|spfile|both> sid='sid|*'
4.從SPFILE創建PFILE
與前面提到的CREATE SPFILE相反,創建PFILE使用CREATE PFILE ... FROM SPFILE。這個命令根據二進制的SPFILE創建一個純文本文件,可以被文本編輯器編輯,並且以後可以用來啓動數據庫。使用這個命令的原因
創建一個“一次性的”參數文件,用戶啓動數據庫來完成維護,其中有一些特殊的設置。所以可以使用這個命令創建PFILE。編輯得到的PFILE,修改所需要設置。然後啓動數據庫,使用PFILE=<FILENAME>選項指定要使用這個PFILE而不是SPFILE。完成後,可以正常的啓動數據庫又會使用SPFILE。
維護修改歷史,在註釋中記錄修改。過去,請多DBA會在參數文件中加大量的註釋來記錄修改歷史。
5.修正被破壞的SPFILE
Unix平臺上可以使用strings命令提取所有設置
Windows平臺上則需要用write.ext(WordPad,寫字板)打開這個文件
如果SPFILE真的被丟失了,可以從警告日誌恢復參數文件的信息。每次啓動數據庫時警告日誌都會包含如下一部分內容,通過這一部分內容,可以很容易地創建一個PFILE,再用CREATE SPFILE命令將其轉換爲一個新的SPFILE。