1.spfile是Oracle9i之后引入的,目的是提高系統安全性。在Oracle8i下初始化參數文件為文本文件,可以使用文本編輯器進行編輯,當需要修改初始化參數時,需要在init.ora文件中修改,再重新啟動數據庫實例。在Oracle10g,引入了服務器參數文件(spfile),可以簡化初始化參數的管理。spfile文件時一個二進制文件,不能使用文本編輯器(雖然文本編輯器打開后,能夠看到參數內容),否則可能造成Oracle無法識別spfile文件。
以下以我自己系統安裝的Oracle與大叫討論這二者的用法:
D盤是Oracle10G的主安裝目錄,分別在1D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.3142010101424、2D:\oracle\product\10.2.0\db_1\database\initorcl.ora、3D:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA3個位置可以找到pfile、spfile的位置和spfile,其中1就是那個文本文件pfile,2指的是3的位置(路徑),3就是哪個二進制文件spfile,如果spfile被損壞了,那么重新啟動數據庫就會報找不到spfile的錯誤,這事需要通過pfile創建spfile:
create spfile from pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.3142010101424';
並且重新啟動數據庫時用startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.3142010101424'。
如果2被修改了路徑,那么3的位置要做相應的調整,不然數據庫重啟啟動會暴同樣的錯誤。
如果1被損壞或刪除,數據庫可以照常啟動,但為了保險,我們還是重新創建一個新的pfile:
create pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.3142010101424' from spfile;
2.查看系統是以pfile還是spfile 啟動:
Select isspecified,count(*) from v$spparameter group by isspecified;
如果 isspecified里有true,表明用spfile進行了指定配置
如果全為false,則表明用pfile啟動
3.使用SPfile的好處:
Spfile 改正了pfile管理混亂的問題,在多結點的環境里,pfile會有多個image
啟動時候需要跟蹤最新的image。這是個煩瑣的過程。
用spfile以后,所有參數改變都寫到spfile里面(只要定義 scope=spfile或both),參數配置有個權威的來源。
4.從spfile獲取pfile
Create pfile='d:pfileSID.ora' from spfile;
Create pfile='d:pfileSID.ora' from spfile='spfile_location';
5.從pfile獲取spfile
Create spfile from pfile='Your_pfile_location'
Create spfile='spfile_location' from pfile='Your_pfile_location'
6.動態修改參數
alter system set parameter=Value scope=spfile|both|memory
7.Startup nomount的時候需要讀去spfile或pfile,兩者共存,spfile優先
8.試驗心得:
環境:window2003 Oracle10g
問題描述:一個數據庫實例,包含二個數據庫(test,orcl),因為設置錯誤的參數造成orcl數據庫spfile文件損壞。通過create spfile生成文件后,一次一只能啟動一個數據庫。
解決過程:
C:\Documents and Settings\hsx>set oracle_sid=orcl
C:\Documents and Settings\hsx>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 5月 15 17:37:34 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/sys as sysdba
已連接到空閑例程。
SQL> create spfile from pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.or
a.3142010101424';
文件已創建。
SQL> startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.314201010
1424'
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 184552324 bytes
Database Buffers 419430400 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> Select isspecified,count(*) from v$spparameter group by isspecified;
ISSPEC COUNT(*)
------ ----------
TRUE 23
FALSE 236
備注:假如有多個數據庫的話,可以通過設置set oracle_sid, 然后pfile單獨啟動
a.052011184726';