Oracle中的pfile和spfile詳解

在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 位於第1 行:

  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

  驅動器E 中的卷是Doc

  卷的序列號是980C-8EFF

  E:\Oracle\Ora9iR2\database 的目錄

  2003-02-10 14:35 2,048 PWDeyglen.ORA

  1 個文檔2,048 字節

  0 個目錄150,347,776 可用字節

  SQL> alter system set db_cache_size=24M scope=spfile;

  alter system set db_cache_size=24M scope=spfile

  *

  ERROR 位於第1 行:

  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 增加了一個新選項:SCOPE。SCOPE 參數有三個可選值:

  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 位於第1 行:

  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 視圖

  假如以下查詢返回0 值,表示您在使用pfile,否則表明您使用的是spfile:

  SQL> SELECT COUNT(*) FROM v$spparameter WHERE value IS NOT NULL;

  COUNT(*)

原文出處:http://www.cnblogs.com/JemBai/archive/2011/02/11/1951112.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章