orcle pfile和spfile的區別和聯絡

sun642514265發表於2013-12-19

pfile用於oracle8i,在oracle9i以上版本中也可以用,以文字形式存在,可以用vi編輯器對其中引數進行修改。檔案格式為initSID.ora

spfile專用於oracle9i以上版本,以二進位制文字形式存在,不能用vi編輯器對其中引數進行修改。檔案格式為spfileSID.ora。如果要對spfile檔案進行修改,可以採用SQL語言:

  SQL> ALTER SYSTEM SET PARAMETER = 'VALUES';進行修改。

  如果不方便使用SQL語句進行操作,可以通過SQL語句:

  SQL> create pfile='/home/oracle/initracdb.ora' from spfile; 這種方法將二進位制文字形式的spfile轉換成文字形式的pfile格式,然後再用vi編輯器對其中的引數進行直觀修改,以達到方便的目的。

檢視系統是以pfile還是spfile啟動

 Select isspecified,count(*) from v$spparameter group by isspecified;

 如果isspecified裡有true,表明用spfile進行了指定配置

 如果全為false,則表明用pfile啟動

 

 

show parameter spfile有值,表從spfile啟動

 

 

使用SPfile的好處

 Spfile改正了pfile管理混亂的問題,在多結點的環境裡,pfile會有多個image

    啟動時候需要跟蹤最新的image。這是個煩瑣的過程。

 spfile以後,所有引數改變都寫到spfile裡面(只要定義scope=spfileboth),引數配置有個權威的來源。

檢視spfile location

 show parameter spfile

spfile獲取pfile

 Create pfile='d:pfileSID.ora' from spfile;

 Create pfile='d:pfileSID.ora' from spfile='spfile_location';

pfile獲取spfile

 Create spfile from pfile='Your_pfile_location'

 Create spfile='spfile_location' from pfile='Your_pfile_location'

 

 

動態修改引數

 alter system set parameter=Value scope=spfile|both|memory

 

Startup nomount的時候需要讀去spfilepfile,兩者共存,spfile優先

強制用pfile啟動

 SQL>startup pfile='Your_Pfile.ora'

 startup spfile='/data/oracle/product/10.2.0/db_1/dbs/dbs/spfile_mqq.ora' force

通過pfile連線到spfile啟動

    修改pfile檔案

oracle的初始化檔案分為spfilesid.oraspfile.orainitsid.ora,都在ora90/database下。

oracle啟動時,初始化引數檔案的載入順序為:spfilesid.oraspfile.orainitsid.ora

重新啟動資料庫,使用startup命令,Oralce將會按照以下順序在預設目錄中搜尋引數檔案:

 

 

a. spfile${ORACLE_SID}.ora

預設目錄

UNIX: ${ORACLE_HOME}/dbs/

NT: ${ORACLE_HOME}\database

 

 

b. spfile.ora

預設目錄

UNIX: ${ORACLE_HOME}/dbs/

NT: ${ORACLE_HOME}\database

 

 

c. init${ORACLESID}.ora

預設目錄

UNIX: ${ORACLE_HOME}/dbs/

NT: ${ORACLE_HOME}\database or

${ORACLE_HOME}\admin\db_name\pfile\

 

 

建立了spfile,重新啟動資料庫,Oracle會按順序搜尋以上目錄,spfile就會自動生效。

 

 

案例:

 

 

前幾天搭建ORACLE RAC for active dg ,因此需要修改spfile檔案裡面的內容,環境搭建完成以後,我想把spfile檔案還原成沒有搭建dg之前,我沒有通過alter system的方式來修改,下面就是我具體的操作步驟

 

 

第一步:通過現有的spfile檔案建立pfile,(因為spfile是二進位制檔案,不能直接修改,上面有提到)

 

 

SQL> create pfile='/home/oracle/initracdb.ora' from spfile;

 

 

第二步:修改建立出來的pfile檔案,具體修改內容略

 

 

第三步:通過修改後的pfile檔案將資料庫啟動的mount狀態

 

 

SQL> startup mount pfile=/home/oracle/initracdb.ora;

 

 

第四步:通過修改後的pfile重新建立spfile


注意:本人採用的是asm的儲存管理,所以spfile檔案在儲存上,要想通過修改後的pfile建立spfile,那麼就應該先刪除asm上的舊的spfile

ASMCMD> cd data/racdb

ASMCMD> ls

CONTROLFILE/

DATAFILE/

ONLINELOG/

PARAMETERFILE/

TEMPFILE/

spfileracdb.ora

ASMCMD>

 

 

通過pfile建立新的spfile

 

SQL> create spfile='+DATA/RACDB/spfileracdb.ora' from pfile='/home/oracle/initracdb.ora';

 

第五步:重啟資料庫例項

 

shutdown immediate;

 

startup;

 

第六步:檢視spfile檔案內容


可以將asm上的spfile檔案拷貝的本地,通過vi來檢視,也可以通過spfile建立pfile檔案來檢視。

 

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

相關文章