Oracle服務器參數文件管理的注意事項
當用戶通過網絡訪問Oracle數據庫時,在客戶端要為應用程序分配用戶進程;與之同時,要在服務器端為期分配服務器進程。而且,客戶應用的所有SQL操作最終都由服務器進程來執行的。那么客戶端進程與服務器進程之間如何協調工作呢?這就主要是通過初始化參數來實現的。在Oracle數據庫中,初始化參數包括默認的初始化參數和以參數文件控制的初始化參數。默認的初始化參數有200多個,在通常情況下,數據庫管理員不需要對其進行更改。數據庫管理員平時要管理的就是參數文件。而參數文件中保存的就是一些非默認參數。
參數文件主要用于保存數據庫啟動例程所需要的初始化參數。作為Oracle數據庫管理員來說,默認參數往往不需要進行更改。其日常需要維護的主要就是參數文件中保存的非默認參數。在Oracle10之后的版本中,其同時支持兩種類型的參數文件,分別為Pfile(文本參數文件)和Spfile(服務器參數文件)。這兩個參數文件雖然起到的作用是相同的,但是其有很大的不同。
一、Pfile參數文件與Spfile參數文件的區別
在Oracle數據庫比較早的版本中,初始化參數都是以Pfile(文本參數文件)的形式來保存的。而在Oracle 9之后的版本中,則引入了Spfile(服務器參數文件)。Oracle官方是建議數據庫管理員采用Spfile參數文件。這主要是因為若采用后者這種形式的參數文件,其有兩個優點。一是比較容易備份,因為服務器參數文件可以利用RMAN備份工具進行備份,而文本參數文件則不行。二是服務器參數文建管理起來比較方便。文本參數文件其維護起來相對比較繁瑣。
不過入道比較早的數據庫管理員,還是比較喜歡采用Pfile(文本參數文件)。若數據庫管理員采用這種類型的參數文件來管理啟動參數的話,則需要注意以下幾個問題。
1、是初始化參數不能夠重復。也就是說,數據庫管理員在修改或者增加初始化參數之前,首先需要檢查初始化參數是否存在。若數據庫管理員想要更改或者設置的初始化參數已經存在的話,那么就必需直接更改原有的參數。只有在不存在的情況下,才能夠在文件末尾添加新的參數。即當相關參數重復時,Oracle數據庫不會自動采用最后的參數,而是會報錯。
2、是需要注意文本參數文件修改格式方面的問題。如在文本參數文件中,每一行都只能夠設置一個參數,不能再同一行中設置多個不同的參數。如參數若是字符型的則可以利用引號引住;但是,若參數是數字型的,則不能夠使用引號引住。但是,若同一個參數有多個值,則可以放在同一行中,只是不同值之間必須要用逗號進行分割。無論是引號還是逗號,都必須是英文狀態下的符號。
3、是在文本參數文件中,有個特殊的符號即#。當數據庫管理員不需要某個參數時,我們往往不建議直接刪除它;而是建議數據庫管理員把參數屏蔽掉。這對于日后維護是很有必要的。此時,數據庫管理員若要屏蔽某個參數,就可以直接在某個參數前面加入#符號。通過這種方式,就可以讓Oracle數據庫服務器忽略這個被屏蔽的參數。
二、Spfile參數文件的管理與配置
筆者雖然接觸Oracle數據庫服務器也已經有不少的年頭了。不過筆者還是比較喜歡采用Spfile參數文件來管理數據庫服務器的參數文件。Spfile參數文件是以二進制形式存放的。若要采用這種形式來管理啟動參數文件,筆者有如下的建議。
1、對于其存放位置的建議。雖然說,Oracle數據庫服務器對于服務器參數文件的存放位置沒有強制性的規定。但是,為了管理方便,筆者還是建議數據庫管理員要把服務器參數文件存放在一個特定的目錄中。如可以把服務器參數文件存放在數據庫安裝目錄下的Datebase目錄中。如此的話,日后維護起來就會比較方便。
2、服務器參數文件如何命名。對于這個命名數據庫服務器也沒有強制性的規則。不過,通常情況下,數據庫管理員會有一套約定俗成的命名規則,如SPfileSID.ora。其中Spfile前綴表示這是一個服務器參數文件,而不是文本參數文件;SID為例程名;ORA則為擴展名。這個命名規則不是強制性的。但是,若數據庫管理員采用這套命名規則的話,則對于其后一任數據庫管理員來說,則其管理起來就會方便許多。
3、如何修改服務器參數文件呢?雖然說服務器參數文件是以二進制形式存儲的。但是,利用文本編輯器工具仍然可以看到相關的內容。如利用文本編輯器打開服務器參數文件中,通常情況下,只有參數文件的尾部與頭部的一些不怎么重要的內容會以二進制的形式顯示外,其他一些具體的設置參數都可以正常顯示出來。但是數據庫管理員不能夠像文本參數文件一樣,在文本編輯器中直接進行更改。而必須采用一個Alter System命令對其進行更改。若采用這個命名進行更改的話,則就不需要遵循上面文本參數文件的相關注意事項。因為利用Alter System命令進行更改的話,就自動會符合相關的格式規定。
但是,需要注意一個問題,即Alter System命令不是萬能的。也就是說,其不能夠更改服務器參數文件中的所有啟動參數。如對于服務器參數文件中的數據庫名,就不能夠直接利用這個命令進行更改。而必須要先修改初始化參數db_name,然后重新建立控制文件。這也主要是為了提高服務器參數文件的準確率所考慮的。
4、如何查看當前數據庫系統到底是采用什么類型的參數文件。由于在Oracle9I以后的數據庫版本中,同時支持文本參數文件與服務器參數文件。如果數據庫管理員是后來接受這個數據庫維護任務的,那么有可能不怎么清楚,當前數據庫服務器到底采用的是什么類型的參數文件。故其要對數據庫服務器參數文件進行更改,也無從做起。此時,數據庫管理員可以利用服務器自帶的命令進行查詢。當相關例程處于啟動狀態時,先以特權用戶登錄。然后采用show parameter spfile命令,來系統顯示初始化參數的值。如果在顯示的結果中,Value處有值的話,則表示例程在使用的是服務期參數文件;如果Value處沒有任何返回結果的話,則表示例程現在使用的是文本參數文件。
三、建立服務器參數文件
若數據庫管理員因為一時粗心,把服務器參數文件丟失了的話,再重新建立服務器參數文件,那可真要命了。因為上面筆者說過,服務器參數文件不能夠直接在文本編輯器中修改,而必須要采用Alter命令進行一條條的更改與添加。所以,其重新建立服務期參數文件是一件比較累人的工作。但是,因為服務器參數文件具有管理方便、可以利用RMAN等備份工具進行備份等優點。若為此舍棄了服務期參數文件,而采用文本參數文件,那就有點因小失大了?所以,無論是Oracle官方,還是筆者,都建議數據庫管理員采用服務器參數文件來管理數據庫的啟動參數。
不過,我們可以采用一些技巧,讓服務器參數文件的建立變得簡單起來。也就是說,我們可以先利用文本文件建立文本參數文件。因為在文本文件中建立相關的參數會比利用命令簡單許多。然后,再通過CREATE Spfile…FROM FILE…命令來進行轉換,把文本參數文件轉換為服務器參數文件。這其中,第一個參數用于指定服務器參數文件全名。第二個參數用于指定文本參數文件全名。注意,如果沒有指定服務器參數文件的全名,則其會在數據庫的默認路徑下建立服務器參數文件,即服務器安裝目錄下的DATEBASE子目錄。若沒有指定文本參數文件全名的話,則數據庫采用的是默認的文本參數文件。再者,執行這個命令也有權限上的限制,即只有特權用戶才能夠執行這個命令。
總之,參數文件中保存了很多啟動參數。在通常情況下,在服務器安裝過程中,服務器會根據相關情況自動對參數進行賦值。若沒有特殊的需要,不需要對其進行額外的更改。但是,若服務器的硬件配置或者服務期所屬的網絡環境出現變化的話,則就需要對其進行調整。另外,有時候出于優化數據庫服務器性能的考慮,也需要對相關的初始化參數進行調整。在對參數文建進行更改時,除了需要遵循以上注意事項之外,筆者還有最后一條忠告。即無論是采用文本參數文件,還是服務器參數文件,最好都能夠事先對參數文件進行備份,以防不時之需。這主要是因為參數文件對于數據庫服務器的影響是很大的。在修改時,若哪個參數被意外更改,很可能導致數據庫啟動失敗。
您正在閱讀:Oracle服務器參數文件管理的注意事項
【編輯推薦】