Oracle的spfile和pfile

達芬奇的夢發表於2017-03-17
9i 以前,Oracle 使用pfile 儲存初始化引數配置,這些引數在例項啟動時被讀取,任何
修改需要重起例項才能生效;使用spfile 您能夠使用ALTER SYSTEM ALTER SESSION
來動態修改那些可動態修改的引數,任何更改能夠立即生效,您能夠選擇使更改只應用於當前實
例還是同時應用到spfile。這就使得任何對spfile 的修改都能夠在命令列完成,我們能夠完全
告別手工修改初始化引數文件,這就大大減少了人為錯誤的發生。
SPFILE 
是個二進位制文件,能夠使用RMAN 進行備份,這樣實際上Oracle 把引數文件也
納入了備份恢復管理。
除了第一次啟動資料庫需要PFILE(然後能夠根據PFILE 建立SPFILE,我們能夠不再需
PFILE,ORACLE 強烈推薦使用spfile,應用其新特性來儲存和維護初始化引數配置。
建立SPFILE
預設的,ORACLE 使用PFILE 啟動資料庫,SPFILE 必須由PFILE 建立,新建立的SPFILE
在下一次啟動資料庫時生效,CREATE SPFILE 需要SYSDBA SYSOPER 的許可權:
語法如下:
CREATE SPFILE[=’SPFILE-NAME’] FROM PFILE[=’PFILE-NAME’]
例:
SQL> create spfile from pfile;
預設的,spfile 建立到系統預設目錄
(Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME\database)
假如SPFILE 已存在,那麼建立會返回以下錯誤:
SQL> create spfile from pfile;
create spfile from pfile
*
ERROR 
位於第:
ORA-32002: 
無法建立已由例程使用的SPFILE
這也能夠用來判斷當前是否使用了SPFILE 文件。
然而意外的時,Oracle 並沒有向其他文件相同,在執行期間保持鎖定,讓我們作以下試驗:
SQL> host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.BAK
SQL> alter system set db_cache_size=24M scope=both;
系統已更改。
SQL> host dir *.ora
驅動器中的卷是Doc
卷的序列號是980C-8EFF
E:\Oracle\Ora9iR2\database 
的目錄
2003-02-10 14:35 2,048 PWDeyglen.ORA
個文件2,048 位元組
個目錄150,347,776 可用位元組
SQL> alter system set db_cache_size=24M scope=spfile;
alter system set db_cache_size=24M scope=spfile
*
ERROR 
位於第:
ORA-27041: 
無法開啟文件
OSD-04002: 
無法開啟文件
O/S-Error: (OS 2) 
系統很難找到指定的文件。
SQL> host rename SPFILEEYGLEN.ORA.BAK SPFILEEYGLEN.ORA
SQL> alter system set db_cache_size=24M scope=spfile;
系統已更改。
SQL>
估計Oracle 以後會想辦法來鎖定這個文件。
使用SPFILE
重新啟動資料庫,使用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 就會自動生效。
使用pfile/spfile 啟動資料庫
假如您想使用pfile 啟動資料庫,您能夠在啟動時指定pfile 或刪除spfile.
SQL> startup pfile='E:\Oracle\admin\eyglen\pfile\init.ora';
您不能以同樣的方式指定spfile,但是能夠建立一個包含spfile 引數的pfile 文件,指向
spfile.
SPFILE 
是個自Oracle9i 引入的初始化引數,類似於IFILE 引數。SPFILE 引數用於定
義非預設路徑的spfile 文件。
您能夠在PFILE 連結到SPFILE 文件,同時在PFILE 中定義其他引數,假如引數重複配置,
後讀取的引數將取代先前的配置。
PFILE 
引數的使用,例如:
這是我們使用SPFILE 啟動的情況,
SQL> startup
ORACLE 
例程已啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已開啟。
SQL> show parameter log_archive_start
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
log_archive_start boolean
TRUE
SQL> show parameter spfile
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
spfile string
%ORACLE_HOME%\DATABASE\SPFILE%
ORACLE_SID%.ORA
SQL>
我們修改PFILE 文件內容如下:
#Pfile link to SPFILE
SPFILE= 'E:\Oracle\Ora9iR2\database\SPFILEEYGLEN.ORA'
log_archive_start = false
能夠預見這個log_archive_start 引數配置將會代替SPFILE 中的配置:
SQL> startup pfile='e:\initeyglen.ora'
ORACLE 
例程已啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已開啟。
SQL> show parameter spfile
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
spfile string
E:\Oracle\Ora9iR2\database\SPF
ILEEYGLEN.ORA
SQL> show parameter log_archive_start
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
log_archive_start boolean
FALSE
然後我們能夠使用ALTER SYSTEM 方式將修改固定到SPFILE.
SQL> alter system set log_archive_start=false scope=spfile;
系統已更改。
所以您也能夠透過如上方式在啟動時修改初始化引數。比我們在本文最後介紹的匯入導
出方法要簡便的多。
修改引數
能夠透過ALTER SYSTEM 或匯入匯出來更改SPFILE 的內容。
ALTER SYSTEM 
增加了一個新選項:SCOPESCOPE 引數有三個可選值:
MEMORY ,SPFILE , BOTH
MEMORY:
只改變當前例項執行
SPFILE:
只改變SPFILE 的配置
BOTH:
改變例項及SPFILE
1. SCOPE=MEMORY
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
TRUE
SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=MEMORY;
系統已更改。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
FALSE
SQL> shutdown immediate
資料庫已關閉。
已解除安裝資料庫。
ORACLE 
例程已關閉。
SQL> startup
ORACLE 
例程已啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已開啟。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
TRUE
2. SCOPE=SPFILE
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
TRUE
SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=SPFILE;
系統已更改。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
TRUE
SQL> shutdown immediate
資料庫已關閉。
已解除安裝資料庫。
ORACLE 
例程已關閉。
SQL> startup
ORACLE 
例程已啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已開啟。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
FALSE
SQL>
3
 SCOPE = BOTH
使用BOTH 選項實際上等同於不帶引數的ALTER SYSTEM 語句。
注意:假如修改靜態引數,那麼需要指定SPFILE 引數,否則將會報錯。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
FALSE
SQL> ALTER SYSTEM SET timed_statistics=TRUE SCOPE=BOTH;
系統已更改。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
TRUE
SQL> shutdown immediate
資料庫已關閉。
已解除安裝資料庫。
ORACLE 
例程已關閉。
SQL> startup
ORACLE 
例程已啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已開啟。
SQL> show parameter timed_statistics
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
timed_statistics boolean
TRUE
SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH;
ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH
*
ERROR 
位於第:
ORA-02095: 
無法修改指定的初始化引數
SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=SPFILE;
系統已更改。
4
.您也能夠在資料庫shutdown 時建立和修改spfile,例如:
SQL> show sga
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> shutdown immediate
資料庫已關閉。
已解除安裝資料庫。
ORACLE 
例程已關閉。
SQL> create pfile from spfile;
文件已建立。
SQL> create spfile from pfile;
文件已建立。
SQL>
是否使用了spfile
判斷是否使用了SPFILE,能夠使用以下方法:
1
.查詢v$parameter 動態檢視,假如以下查詢返回空值,那麼您在使用pfile.
SQL> SELECT name,value FROM v$parameter WHERE name='spfile';
NAME
------------------------------------------------------------------
VALUE
------------------------------------------------------------------
spfile
%ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA
2
.或您能夠使用SHOW 命令來顯示引數配置,假如以下結果value 列返回空值,那
麼說明您在使用pfile:
SQL> SHOW PARAMETER spfile
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
spfile string
%ORACLE_HOME%\DATABASE\SPFILE%
ORACLE_SID%.ORA
3
.查詢v$spparameter 檢視
假如以下查詢返回值,表示您在使用pfile,否則表明您使用的是spfile:
SQL> SELECT COUNT(*) FROM v$spparameter WHERE value IS NOT NULL;
COUNT(*)

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

相關文章