數(shù)據(jù)庫結(jié)構(gòu)(三).物理結(jié)構(gòu)
?
?
一、數(shù)據(jù)庫的物理結(jié)構(gòu):
?
1.數(shù)據(jù)文件(data file)?
??? 每個(gè)數(shù)據(jù)庫有一個(gè)或多個(gè)數(shù)據(jù)文件,數(shù)據(jù)文件包含了全部數(shù)據(jù)庫的數(shù)據(jù)。邏輯數(shù)據(jù)庫結(jié)構(gòu)(如表、索引、數(shù)據(jù)字典)都存儲在數(shù)據(jù)文件中。在存取數(shù)據(jù)時(shí),Oracle先從數(shù)據(jù)文件中讀取數(shù)據(jù)到內(nèi)存的數(shù)據(jù)緩沖區(qū)中,這樣的存取方式減少了磁盤I/O操作,提高了相應(yīng)性能。數(shù)據(jù)文件一旦建立后就不能改變大小,只能增加。
?
??? 數(shù)據(jù)文件系統(tǒng)機(jī)制包括:
??? ①“Cooked”操作系統(tǒng)(OS)文件系統(tǒng)
??? ②原始分區(qū)(raw partitions)
??? ③自動(dòng)存儲系統(tǒng)(Automatic Storage Management,ASM)
??? ④集群文件系統(tǒng)(RAC)
??? 本地管理的表空間:
??? 8.1.5版本之后使用本地管理表空間(local-managed tablespace)。它的優(yōu)點(diǎn)是:無需數(shù)據(jù)字典,僅對每個(gè)數(shù)據(jù)文件中存儲的一個(gè)位圖來管理區(qū)段。目前版本已無法建立dictionary tablespace
?
2.控制文件(control file)?
??? 控制文件是一個(gè)很小的二進(jìn)制文件,用于描述數(shù)據(jù)庫的物理結(jié)構(gòu)。包括:①數(shù)據(jù)庫名;②數(shù)據(jù)庫數(shù)據(jù)文件和日志文件的名字和位置;③數(shù)據(jù)庫建立日期。
?
??? 一般在安裝Oracle時(shí)自動(dòng)創(chuàng)建,其存放位置由參數(shù)文件SPFILEsid.ora的CONTROL_FILES參數(shù)值來確定。數(shù)據(jù)庫在使用的過程中會不斷更新控制文件。如果該文件損壞,則數(shù)據(jù)庫將無法正常工作。
?
??? Oracle10g默認(rèn)安裝了3個(gè)控制文件,每個(gè)文件內(nèi)容相同,當(dāng)某個(gè)文件損壞時(shí),Oracle會自動(dòng)使用另一個(gè),以確保數(shù)據(jù)庫正常運(yùn)行。
??? 可查詢V$CONTROLFILE來獲得控制文件信息。
?
3.重做日志文件(redo log file)?
??? 重做日志文件用于記錄對數(shù)據(jù)庫的修改信息,包括數(shù)據(jù)的修改以及數(shù)據(jù)庫結(jié)構(gòu)的修改。查詢信息不會被記錄在日志中。為了防止日志文件本身的故障,ORACLE允許鏡象日志(mirrored redo log),以致可在不同磁盤上維護(hù)兩個(gè)或多個(gè)日志副本。日志文件中的信息僅在系統(tǒng)故障或介質(zhì)故障恢復(fù)數(shù)據(jù)庫時(shí)使用,這些故障阻止將數(shù)據(jù)庫數(shù)據(jù)寫入到數(shù)據(jù)庫的數(shù)據(jù)文件。然而任何丟失的數(shù)據(jù)在下一次數(shù)據(jù)庫打開時(shí),ORACLE自動(dòng)地應(yīng)用日志文件中的信息來恢復(fù)數(shù)據(jù)庫數(shù)據(jù)文件。
?
??? 日志工作過程中,多個(gè)日志是循環(huán)使用的,即一個(gè)日志文件組被填滿后,系統(tǒng)自動(dòng)轉(zhuǎn)換到另一個(gè)日志文件組。當(dāng)所有日志文件組都被填滿后,系統(tǒng)會將日志信息寫入到第一個(gè)日志組中,這時(shí)有兩個(gè)模式:歸檔模式(Archivelog)和非歸檔模式(NoArchivelog),當(dāng)運(yùn)行在歸檔模式時(shí),系統(tǒng)將啟用ARCH進(jìn)程將要被覆蓋的日志保存到磁盤上形成歸檔日志。若使用非歸檔模式,則會覆蓋被寫入的文檔。
?
??? 查詢數(shù)據(jù)庫的日志組情況:select group#,bytes,members,status from v$log;
?
??? 查詢數(shù)據(jù)庫的日志歸檔模式:select log_mode from v_database;
?
4.臨時(shí)文件(temp file)?
??? Oracle的臨時(shí)文件用來存儲大規(guī)模排序和散列操作的中間結(jié)果。如果RMAN中沒有足夠的空間,還會用臨時(shí)文件存儲全局臨時(shí)表數(shù)據(jù),或者結(jié)果集數(shù)據(jù)。
?
??? 注意:
??? 1.永久表和索引等不會存儲在臨時(shí)文件中,但是臨時(shí)表及其索引的內(nèi)容要存儲在臨時(shí)文件。
??? 2.臨時(shí)文件不生成redo log,無法重做
??? 3.不需要備份臨時(shí)數(shù)據(jù)文件,因?yàn)闊o法恢復(fù)
?
5.密碼文件(password file)?
??? 密碼文件是一個(gè)可選文件,允許遠(yuǎn)程SYSDBA或管理員訪問數(shù)據(jù)庫。具體操作比較復(fù)雜。
?
?
?
二、實(shí)例的物理結(jié)構(gòu) :
?
1.參數(shù)文件(parameter file)?
??? 參數(shù)文件記錄了Oracle數(shù)據(jù)庫的基本參數(shù)信息,主要包括:數(shù)據(jù)庫名、控制文件路徑、進(jìn)程等。
??? 以前的參數(shù)文件名為init.ora,所以又叫init文件,但是在Oracle10g中,參數(shù)文件名為SPFILEsid.ora,其參數(shù)由Oracle系統(tǒng)自動(dòng)管理。SPFILE的改進(jìn)主要消除了參數(shù)文件的兩個(gè)嚴(yán)重問題:
?
??? 1.由于只能放在數(shù)據(jù)庫服務(wù)器上,不能放在客戶機(jī)上,所以杜絕參數(shù)文件的繁衍。
??? 2.可使用ALTER SYSTEM命令直接寫入?yún)?shù)值,無需使用編輯器進(jìn)行編輯。(用戶最好不要用編輯器進(jìn)行修改)
??? 注:取消參數(shù)設(shè)置:alter system reset sort_area_size scope=spfile sid='*'
?
2.跟蹤文件(trace file)?
??? 跟蹤文件能夠提供調(diào)試信息,需要設(shè)置參數(shù)SQL_TRACE=TRUE
??? 數(shù)據(jù)庫的測量性可以使用以下方法:
??? 1.V$動(dòng)態(tài)視圖:例如V$WAITSTAT、V$SESSION_EVENT等,均可反映系統(tǒng)動(dòng)作
??? 2.審計(jì)命令:例如DBMS_FGA等,可對某個(gè)表進(jìn)行顆粒審計(jì)檢測
??? 3.資源管理器:DBMS_RESOURCE_MANAGER,對數(shù)據(jù)庫資源(CPU、I/O等)實(shí)現(xiàn)微管理
??? 4.Oracle事件:跟蹤診斷,在之前文章中已經(jīng)詳細(xì)介紹過
??? 5.DBMS_TRACE:PL/SQL引擎中的工具,全面記錄調(diào)用樹、產(chǎn)生的異常、遇到的錯(cuò)誤等
??? 6.觸發(fā)器:不用介紹了
??? 7.SQL_TRACE:即10046事件
?
3.警告文件(alert file)?
??? 警告文件就是數(shù)據(jù)庫的日記,是一個(gè)簡單的文本文件。記載了從數(shù)據(jù)庫創(chuàng)建到完結(jié)之間的所有包括日志開關(guān)、內(nèi)部錯(cuò)誤、表空間創(chuàng)建、離線及恢復(fù)等等的所有操作信息。
?
?
三、其他物理結(jié)構(gòu):
?
1.修改跟蹤文件(change tracking file)?
??? 修改跟蹤文件是Oracle10g新增的一個(gè)可選文件,唯一的目的是跟蹤上一個(gè)增量備份以來那些塊已經(jīng)修改。這樣RMAN就只需要備份發(fā)生變化的塊,而不必讀取整個(gè)數(shù)據(jù)庫。如果打開跟蹤功能,數(shù)據(jù)庫的任何改變都會被自動(dòng)寫入到這個(gè)文件中。但是這回消耗系統(tǒng)的資源。
?
??? 可使用以下命令打開:alter database enable block change tracking;
?
2.閃回日志文件(flashback log file)?
??? 這也是Oracle10g的新增功能。引入Flash Back命令是為了加快原來很慢的時(shí)間點(diǎn)數(shù)據(jù)庫恢復(fù)(point in time database recovery)過程。具體內(nèi)容參考詳細(xì)資料。
?
3.轉(zhuǎn)儲文件(dump/DMP file)?
??? 使用導(dǎo)出工具創(chuàng)建的獨(dú)立的DMP文件,其中包括了所有必要的元數(shù)據(jù)(create和alter語句形式),可能還有數(shù)據(jù)本身,可以用于重新創(chuàng)建表、模式、甚至整個(gè)數(shù)據(jù)庫。而導(dǎo)入工具的作用就是讀取這些DMP文件,執(zhí)行其DDL語句,并加載其數(shù)據(jù)。
?
4.數(shù)據(jù)泵文件(Data Pump file)?
??? 主要是被外部表和新的導(dǎo)入、導(dǎo)出工具(IMPDP/EXPDP)使用。只有10g之后的版本有這種功能。
?
5.平面文件(flat file)?
??? 平面文件就是一些沒有格式的數(shù)據(jù)記錄文件。
?
?