oracle資料庫的設定檔指的是系統在啟動到“nomount”階段需要載入的檔案,也叫做pfile或者spfile,但是其實pfile和spfile是不同的檔案。
不同的資料庫設定檔是不同的,但是格式大體是近似的,預設地址是oracle安裝目錄下database 檔案夾,例如:“c:\app\Administrator\product\11.2.0\dbhome_1\database”。
前面提到,設定檔分兩種,一種叫pfile,一種叫spfile,區別在於spfile是二進位檔案,給機器看的,pfile是文字檔,給使用者看的,但是oracle啟動的時候只會載入其中一個檔案,當然最好是載入二進位的spfile,速度更快。
雖然設定檔分兩種,但是檔案裡的配置,或者說檔案想表達的內容是一樣的,所以這兩個檔案是可以相互轉換的,以sysdba身份進入sqlplus(以下不做特殊申明,預設表示已經以sysdba身份登入了):
sqlplus / as sysdba;
1. 首先先看看系統載入的spfile資訊
show parameter spfile(或者show parameter pfile,顯示的結果是一樣的)
name顯示的是spfile,value是載入的spfile檔案地址,即表示當前載入的是spfile檔案。
spfile檔案命名規則:” SPFILE” +sid. ora;例如SPFILEORCL.ORA
pfile檔案命名規則:” INIT”+ sid. ora;例如INITorcl.ORA
2. pfile和spfile檔案的相互轉換
可能大多數朋友發現,在存放設定檔的檔案夾裡,只有spfile,沒有pfile,本人電腦上的資料庫是剛安裝的64位oracle,也是沒有,那麼想要資料庫用文字檔啟動,或者想用文字檔查看下設定檔的參數,卻又沒有這個檔案怎麼辦呢,命令oracle以spfile檔案的配置產生一個pfile就可以了,輸入以下命令:
create pfile from spfile;
提示文字檔已建立。
再次查看檔案夾會發現已存在pfile檔案
C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITorcl.ORA
3. 讓oracle載入pfile或者spfile
系統預設用二進位檔案啟動,但是有的朋友喜歡用文字檔啟動,方便查看即時的參數。這裡說明下,系統無法修改用哪種參數檔案啟動(個人猜測是因為參數檔案是oracle啟動時載入的第一個檔案,如果這個檔案可以隨意配置,會導致無法啟動等故障)。但是oracle對參數檔案有一個載入順序,優先尋找載入spfile,找不到再去找pfile,所以我們可以產生了pfile後將spfile檔案刪除,這樣系統就自動載入pfile了 ,這時候再去執行spfile命令,查到的結果就是空(載入的一定是pfile檔案 ,如果沒有載入任何檔案的話,資料庫無法啟動)
4. spfile載入順序
這裡詳細提一下設定檔的載入順序
1) SPFILE.ORA
2) SPFILE.ORA
3) INIT.ora
4) startup pfile=’’
startup pfile=’’是以指定的pfile檔案去啟動資料庫,按理說這個應該排在第一,但是oracle在載入的時候,即便指定了pfile檔案,也依然會去尋找有沒有合格pfile檔案,如果有,就載入,如果都沒有,才會去載入指定的pfile檔案。
第一個找的是以PFILE開頭,接sid的名稱,以ora結尾的檔案;如果沒有,再找SPFILE.ORA這個檔案;如果還是沒有再找以INIT開頭,接sid名稱,以ora結尾的檔案;這三個都沒有的情況下,再去載入指定的pfile檔案;如果指定的檔案也沒有,那就無法啟動資料庫了。
如果有前三種檔案中任意一個,再指定載入一個pfile,那麼oracle也會報錯,無法啟動。
5. 修複設定檔
如果設定檔壞了怎麼辦,資料庫無法啟動怎麼辦。有很多種方法,這裡介紹一個最簡單的。
如果壞了,丟失了,徹底刪除了,備份資料也不行了,各種絕望了,可以試試這樣,隨便找一個pfile(一定要是文字檔,方便修改),將檔案裡相關地址或者資料檔案的資訊,根據實際資料庫的資訊做修改,或者增加相應的檔案夾,並把檔案裡的sid改成實際資料庫的sid,例如這些參數:
*.control_files=’C:\app\Administrator\oradata\orcl\control01.ctl’,’C:\app\Administrator\flash_recovery_area\orcl\control02.ctl’
改成自己項目裡對應的controller檔案,然後啟動資料庫,如果報錯,就根據儲存資訊刪除多餘的參數,直到可以啟動為止。。。
只要資料庫啟動了,萬事好商量。
執行這條語句:
create pfile from memory;
從記憶體中產生一個spfile檔案,這樣下次啟動就不需要再指定pfile了。
6. 替換檔案的某個參數
假如因為一個spfile檔案的某個參數的原因,資料庫不能啟動,沒有備份,沒有pfile,各種蛋疼的沒有,怎麼辦。建立一個ora檔案,檔案內容如下:
spfile=C:\app\Administrator\product\11.2.0\dbhome_1\database\11SPFILEORCL.ORA
參數名=參數值
startup pfile=’’
這表示用指定的pfile檔案啟動,這個pfile檔案包含了C:\app\Administrator\product\11.2.0\dbhome_1\database\11SPFILEORCL.ORA檔案的所有資料,並且還有後面的那些參數,後面的參數會將前面的參數覆蓋掉,順利啟動後,產生一個新的spfile即可。
如有錯誤,還望指出,共同進步;手敲累抽搐,裝載注出處。