2014-08-25 BaoXinjian
一、摘要
ORACLE中的參數文件是一個包含一系列參數以及參數對應值的操作系統文件,可以分為兩種類型PFile and SPFile。
它們是在數據庫實例啟動時候加載的,決定了數據庫的物理結構、內存、數據庫的限制及系統大量的默認值、數據庫的各種物理屬性、指定數據庫控制文件名和路徑等信息,是進行數據庫設計和性能調優的重要文件。
1. 概念
初始化參數文件(Initialization Parameters Files),Oracle 9i之前,ORACLE一直采用PFILE方式存儲初始化參數,該文件為文本文件。
服務器參數文件(Server Parameter Files),從Oracle 9i開始,Oracle引入了SPFILE文件,該文件為二進制格式,不能通過手工修改。
2. 修改spfile參數的三種模式
3. 如何查看SPFILE與PFILE的目錄位置
方法1. 查看動態視圖
SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';
方法2. 查看參數
SQL> show parameter spfile
SQL> show parameter pfile
4. 判斷數據庫從SPFILE還是PFILE啟動
方法1:查詢動態視圖V$PARAMETER,如果VALUE值為非空,則是SPFILE啟動,否則是PFILE。
SELECT name, value, display_value FROM v$parameter WHERE name ='spfile';
方法2:SHOW PARAMETER命令查看
SQL> show parameter spfile;
方法3:通過v$spparameter視圖,如果一下查詢返回0值,表示你在使用pfile,否則表明你使用的是spfile
SQL> SELECT COUNT(1) FROM v$spparameter WHERE value is not null;
此v$spparameter的值來自於spfile文件定義,並在動態性能視圖中顯示
二、PFile 和 SPFile的區別
1:PFILE是文本文件的,而SPFILE是二進制格式的。
PFILE文件可以用文本編輯器打開手工配置、而SPFILE不行,只能通過SQL命令在線修改。
從操作系統上可以看到這兩者的區別,初始化參數文件為ASCII文本文件,SPFILE為數據文件。
2:SPFILE的修改是可以通過SQL命令在線修改,不再需要通過手工修改,對於動態參數所有更改可以立即生效,而PFILE的修改必須重啟實例才能生效。
3:手動創建數據庫而不是通過DBCA,則開始創建數據庫時,只能定義PFILE。
創建數據庫完成後再通過PFILE定義SPFILE
三、Oracle啟用參數文件順序
Step1. spfile<sid>.ora
Unix/Linux缺省存放目錄 $ORACLE_HOME/dbs/
Step2. spfile.ora
Unix/Linux缺省存放目錄 $ORACLE_HOME/dbs/
Step3. init<sid>.ora
Unix/Linux缺省存放目錄 $ORACLE_HOME/dbs/
四、案例 - 創建一個PFile,並啟動,後復制為SPFile再次啟動
1. 建立PFile
2. 通過PFile建立SPFile <create spfile from pfile>
3. 查看SPFile內容, v$spparameter
********************作者: 鮑新建********************
9i以上的版本默認的啟動的是spfile,其默認存儲位置$ORACLE_HOME/dbs(unix)或者$ORACLE_HOME\database,默認名稱為spfilesid.ora,其中sid為數據庫的sid。
但你也可以通過制定pfile的文件啟動數據庫
startup pfile ='$ORACLE_HOME/dbs/pfilesid.ora;
這種情況多用在需要修改隱式參數時;
查看當前數據庫使用的是spfile還是pfile的方式如下:
以sysdba身份登錄數據庫,執行命令show parameter spfile,如果有值,則使用的是spfile,否則使用的是pfile;
SQL> conn / as sysdba
Connected.
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string ?/dbs/[email protected]
SQL>
突然想到了這個問題就做了個測試
sql> startup
--操作(操作就是下列的方法,可以判斷是否是pfile啟動的)
sql> create pfile='/home/oracle/init.ora' from spfile;
sql> shutdown immediate
sql> startup pfile=/home/oracle/init.ora
--操作(操作就是下列的方法,可以判斷是否是pfile啟動的)
------------------------------------------------------------方法一查詢v$parameter動態視圖,如果查詢結果為空,則為pfile啟動,反之則為spfile
select name,value from v$parameter where name='spfile';
------------------------------------------------------------方法二使用show命令,如果查詢結果為空,則為pfile啟動,反之則為spfile
show parameter spfile
------------------------------------------------------------方法三查新v$spparameter視圖,返回值為0,則為pfile啟動,反之則為spfile
select count(*) from v$spparameter where value is not null;
------------------------------------------------------------方法四還是v$spparameter視圖,如果true返回為0,則為pfile啟動,反之為spfile
select isspecified,count(*) from v$spparameter group by isspecified;
------------------------------------------------------------方法五使用下邊的語句直接判斷
select decode(count(*),1,'spfile','pfile') USED
from v$spparameter where rownum=1 and isspecified='TRUE';USED------pfile------------------------------------------------------------
方法大同小異,相互學習吧