熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中的pfile和spfile詳解

2013-11-13 15:47:27  來源: Oracle 

  在i 以前Oracle 使用pfile 存儲初始化參數配置這些參數在實例啟動時被讀取任何

  修改需要重起實例才能生效使用spfile 您能夠使用ALTER SYSTEM 或ALTER SESSION

  來動態修改那些可動態修改的參數任何更改能夠立即生效您能夠選擇使更改只應用於當前實

  例還是同時應用到spfile這就使得任何對spfile 的修改都能夠在命令行完成我們能夠完全

  告別手工修改初始化參數文檔這就大大減少了人為錯誤的發生

  SPFILE 是個二進制文檔能夠使用RMAN 進行備份這樣實際上Oracle 把參數文檔也

  納入了備份恢復管理

  除了第一次啟動數據庫需要PFILE(然後能夠根據PFILE 創建SPFILE)我們能夠不再需

  要PFILEORACLE 強烈推薦使用spfile應用其新特性來存儲和維護初始化參數配置

  一 創建SPFILE

  缺省的ORACLE 使用PFILE 啟動數據庫SPFILE 必須由PFILE 創建新創建的SPFILE

  在下一次啟動數據庫時生效CREATE SPFILE 需要SYSDBA 或SYSOPER 的權限

  語法如下

  CREATE SPFILE[=SPFILENAME] FROM PFILE[=PFILENAME]

  例

  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: 無法創建已由例程使用的SPFILE

  這也能夠用來判斷當前是否使用了SPFILE 文檔

  然而意外的時Oracle 並沒有向其他文檔相同在運行期間保持鎖定讓我們作以下試驗

  SQL> host rename SPFILEEYGLENORA SPFILEEYGLENORABAK

  SQL> alter system set db_cache_size=M scope=both;

  系統已更改

  SQL> host dir *ora

  驅動器E 中的卷是Doc

  卷的序列號是CEFF

  E:\Oracle\OraiR\database 的目錄

   : PWDeyglenORA

   個文檔 字節

   個目錄 可用字節

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

  alter system set db_cache_size=M scope=spfile

  *

  ERROR 位於第 行:

  ORA: 無法打開文檔

  OSD: 無法打開文檔

  O/SError: (OS ) 系統很難找到指定的文檔

  SQL> host rename SPFILEEYGLENORABAK SPFILEEYGLENORA

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

  系統已更改

  SQL>

  估計Oracle 以後會想辦法來鎖定這個文檔

  二 使用SPFILE

  重新啟動數據庫使用startup 命令Oralce 將會按照以下順序在缺省目錄中搜索參

  數文檔

  a spfile${ORACLE_SID}ora

  缺省目錄UNIX: ${ORACLE_HOME}/dbs/

  NT: ${ORACLE_HOME}\database

  b spfileora

  缺省目錄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\initora;

  您不能以同樣的方式指定spfile但是能夠創建一個包含spfile 參數的pfile 文檔指向

  spfile

  SPFILE 是個自Oraclei 引入的初始化參數類似於IFILE 參數SPFILE 參數用於定

  義非缺省路徑的spfile 文檔

  您能夠在PFILE 鏈接到SPFILE 文檔同時在PFILE 中定義其他參數假如參數重復配置

  後讀取的參數將取代先前的配置

  PFILE 參數的使用例如:

  這是我們使用SPFILE 啟動的情況

  SQL> startup

  ORACLE 例程已啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers 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\OraiR\database\SPFILEEYGLENORA

  log_archive_start = false

  能夠預見這個log_archive_start 參數配置將會代替SPFILE 中的配置

  SQL> startup pfile=e:\initeyglenora

  ORACLE 例程已啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  數據庫已打開

  SQL> show parameter spfile

  NAME TYPE

  

  VALUE

  

  spfile string

  E:\Oracle\OraiR\database\SPF

  ILEEYGLENORA

  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

   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 bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  數據庫已打開

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

   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 bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  數據庫已打開

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  FALSE

  SQL>

  . 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 bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers 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: 無法修改指定的初始化參數

  SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=SPFILE;

  系統已更改

  .您也能夠在數據庫shutdown 時創建和修改spfile例如

  SQL> show sga

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  SQL> shutdown immediate

  數據庫已關閉

  已卸載數據庫

  ORACLE 例程已關閉

  SQL> create pfile from spfile;

  文檔已創建

  SQL> create spfile from pfile;

  文檔已創建

  SQL>

  五 是否使用了spfile

  判斷是否使用了SPFILE能夠使用以下方法

  .查詢v$parameter 動態視圖假如以下查詢返回空值那麼您在使用pfile

  SQL> SELECT namevalue FROM v$parameter WHERE name=spfile;

  NAME

  

  VALUE

  

  spfile

  %ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%ORA

  .或您能夠使用SHOW 命令來顯示參數配置假如以下結果value 列返回空值

  麼說明您在使用pfile:

  SQL> SHOW PARAMETER spfile

  NAME TYPE

  

  VALUE

  

  spfile string

  %ORACLE_HOME%\DATABASE\SPFILE%

  ORACLE_SID%ORA

  .查詢v$spparameter 視圖

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

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

  COUNT(*)


From:http://tw.wingwit.com/Article/program/Oracle/201311/17305.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.