1. 程式人生 > >Oracle spfile和pfile的區別,生成,載入和修復

Oracle spfile和pfile的區別,生成,載入和修復

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即可。

作者:feiepuhuo001
來源:CSDN
原文:https://blog.csdn.net/feiepuhuo001/article/details/51143478
版權宣告:本文為博主原創文章,轉載請附上博文連結!