軟件的配置文件
基本上每個軟件都有一些配置信息;在Windows系統中,很多軟件都將這些配置信息寫入注冊表中;而在Linux系統中,則是在/etc目錄下生成一個配置文件。
這些配置文件無非就是記錄一些參數值,在軟件啟動的時候讀取這些參數值,對軟件進行初始化。同理,對於Oracle來說,也存在著這麼個配置文件,裡面記錄了一些初始化參數,在Oracle啟動的時候,會讀取這個配置文件中的數據對Oracle進行初始化。這篇文章就對Oracle啟動過程中使用到的這個參數文件進行重點講解與分析。
Oracle的啟動“配置文件”
在《Oracle學習筆記——數據庫啟動原理》這篇文章中也說到了,Oracle的啟動分為三步,在第一步啟動實例的時候,需要讀取配置文件,決定分配多大的內存,那這個配置文件是“何許人也”呢?
在Oracle中,有兩種類型的初始化配置文件,更多的時候,我們把這兩種初始化配置文件叫做初始化參數文件。Oracle有許許多多的初始化參數,這些參數用於對整個數據庫的資源、用戶訪問、進程等信息進行控制。而這些初始化參數就保存在這個初始化參數文件中,我們可以進行讀取,甚至修改。在Oracle中,這兩種類型的初始化參數文件分別是:
PFILE文件;
SPFILE文件;
這兩種初始化參數文件中記錄的內容是一模一樣的,只是文件格式不一樣罷了,PFILE文件就是一個文本文件,而SPFILE則是一個二進制文件。
下面就分別對這兩種初始化參數文件進行總結。
PFILE文件
PFILE文件和很多的配置文件一樣,就是一個簡單的文本文件,使用你的文本編輯器就可以打開。可能包含以下信息:
orcl.__db_cache_size=201326592
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='C:\Oracle11g'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=281018368
orcl.__sga_target=528482304
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=310378496
orcl.__streams_pool_size=0*.audit_file_dest='C:\Oracle11g\admin\orcl\adump'*.audit_trail='db'*.compatible='11.2.0.0.0'...
這就是PFILE文件中的一些參數信息,以key=value的形式記錄。
SPFILE文件
SPFILE是一個二進制文件,如果直接打開的話,是不可閱讀的。在打開數據庫的情況下,我們可以運行以下命令檢查當前使用的是SPFILE,還是PFILE。
SHOW PARAMETER PFILE;
當以SPFILE文件啟動數據庫時,則會顯示出SPFILE的信息。以此我們就可以得到SPFILE的路徑。
修改初始化參數
初始化參數文件中的參數是為了對數據庫的資源,進程,內存等信息進行限制的,避免不了要對這些參數進行修改,以達到最優的性能。
對於PFILE文件,可以直接使用文本編輯器打開,直接編輯,簡單明了。但是存在一個問題,在數據庫運行時,DBA不能永久修改初始化參數的值。要想永久修改初始化參數的值,DBA需要先關閉數據庫,對參數文件PFILE進行修改,然後用修改後的PFILE重新啟動數據庫。
當使用SPFILE文件時,修改初始化參數的SQL命令為:
-- key表示需要修改的參數名稱-- value表示修改以後的新值-- COMMENT表示對該字段進行的注釋-- DEFERRED表示指定修改是在下次啟動實例時再生效-- SCOPE表示修改應用的范圍
-- MEMORY表示僅僅是內存中,不寫入SPFILE;下次實例啟動時,修改就被丟棄
-- SPFILE表示寫入SPFILE中,但並不立即應用到當前實例中,下次啟動實例時再生效
-- BOTH(默認)表示立即生效並且寫入SPFILE中-- SID表示修改應用的實例,如果指定*(默認選項),則是應用到所有實例
ALTER SYSTEM SET <key>=<value> <COMMENT=’text’> <DEFERRED> <SCOPE=MEMORY | SPFILE | BOTH> <SID=’SID’|*>
但是對於SPFILE文件的修改,靈活性則非常的大。
我們可以永久的修改初始化參數文件而不用重啟數據庫;
我們可以臨時的修改初始化參數文件,重新啟動則會丟失修改;
我們可以僅對本次會話修改初始化參數文件,會話結束則丟失修改。
使用PFILE生成SPFILE文件
初始化參數文件是一個非常重要的文件,它是DBA經過不斷的調優而配置得來的,裡面參數的價值千金,所以對於初始化參數的備份是必不可少的。至於備份我就不多說了,無非就是拷貝一份。如果現在我的手頭只有PFILE文件,而沒有SPFILE文件,那麼如何生成一份SPFILE呢?
我們可以通過SQL命令,使用PFILE文件生成SPFILE文件。命令如下:
CREATE SPFILE='<指定生成的SPFILE文件路徑>' FROM PFILE='<指定PFILE文件路徑>';
使用SPFILE文件生成PFILE文件
如果我的手頭只有SPFILE文件,那麼我如何生成PFILE文件呢?同理,我們可以使用SPFILE來生成PFILE,命令如下:
-- 從指定SPFILE文件創建PFILE
CREATE PFILE='<指定生成的PFILE文件路徑>' FROM SPFILE='<指定SPFILE文件路徑>';-- 從當前實例所使用的SPFILE文件創建PFILE
CREATE PFILE='<指定生成的PFILE文件路徑>' FROM SPFILE;
使用初始化參數文件啟動數據庫
Oracle在啟動實例的時候會讀取初始化參數文件中的信息,如果我的手頭現在有多個初始化參數文件,我想從指定的一個初始化參數文件啟動數據庫,那麼如何從指定的初始化參數文件啟動數據庫呢?
數據庫的STARTUP命令中可以指定從哪個PFILE來啟動,但是只能指定PFILE, 不能指定SPFILE文件。
-- 指定SPFILE文件啟動,出錯
SQL> STARTUP SPFILE='C:\MYSPFILE.ORA';
SP2-0714: 無效的 STARTUP 選項組合-- 指定PFILE文件啟動,正常啟動
SQL> STARTUP PFILE='C:\mypfile.ora';
ORACLE 例程已經啟動。Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 327156176 bytes
Database Buffers 201326592 bytes
Redo Buffers 5804032 bytes
數據庫裝載完畢。數據庫已經打開。
總結
學習Oracle真的是一個漫長的過程。各種知識點,雖然有些知識學了,實踐的機會很少;但是對於理解其它的知識點是非常有幫助的。