基礎知識1——資料物理,邏輯儲存結構

與刃爭鋒發表於2014-01-06
物理資料庫結構

三類必須的檔案:控制檔案(control file),聯機重做日誌檔案(online redo log file),資料檔案(data file)
其它外部檔案:初始化引數檔案,口令檔案,歸檔重做日誌檔案,日誌,跟蹤檔案.

控制檔案:指向資料庫其餘部分的指標,聯機重做日誌檔案和資料檔案的位置,更新的歸檔日誌檔案位置,儲存維護資料庫完整性的資訊,重要的序列號和時間戳,沒配置恢復目錄時,備份的詳細資訊也儲存在控制檔案裡. 最少1個最多8個,建議多路複用控制檔案.

重做日誌(redo log):按時間順序儲存應用於資料庫的一連串變更向量,包含重建(或重做)所有已完成工作的最少限度的資訊.資料檔案或資料庫受損,可以將變更向量來恢復.

兩類重做日誌檔案:聯機重做日誌檔案(必須要有的)和歸檔日誌檔案(可選,但建議必須有).

每個資料庫至少有兩個聯機重做日誌檔案,或者說有兩組,每組至少一個成員——其中一個組接受當前更改,另一個組可用於歸檔.每次日誌切換將生成歸檔重做日誌問及那.建議多路複用技術進行保護重做日誌檔案.這樣,丟失某個組的一個成員,只要其它成員存在,資料庫仍能執行. 重做日誌檔案建議50MB以上,也別太大.

資料檔案:建立資料庫至少要有兩個資料檔案,SYSTEM表空間(儲存資料字典)和SYSAUX表空間(儲存資料字典的輔助資料).
資料檔案的大小和數量不受限制,值受主作業系統和硬體功能的限制.資料檔案是可見的物理結構,段(segment)是資料的儲存結構,典型的段是表和索引.可隨時重新命名,移動,新增,刪除資料檔案,也可重設其大小.但請記住!某些資料檔案的某些操作會產生停機時間.
在作業系統級別看,資料檔案由多個作業系統塊組成,內部將資料檔案的格式設定為oracle塊.在每個資料檔案中這些塊連續編號,建立資料檔案時塊大小固定不變,跟作業系統塊大小沒關係.

塊中存在頭部分和資料區域,還有一些空間空間.頭部分包含行目錄資訊,行鎖定資訊.資料區域包含行本身,行,索引鍵等.當使用者會話使用資料時,伺服器程式允許會話在磁碟上找到相關的塊,將其複製到db buffer. 伺服器程式對資料檔案執行讀操作,DBWn對資料檔案執行寫操作.
資料檔案應定期備份,可由RAID技術進行保護. 

其他資料庫檔案
例項引數檔案(instance parameter file):例項啟動時,SGA根據引數檔案設定記憶體,啟動後臺程式,這是例項啟動所需的唯一檔案.其中的引數只有一個是必須的-DB_NAME引數,此檔案雖小,但必須有,有時叫pfile有時叫spfile.

口令檔案(password file):使用者通過提交使用者名稱和口令來建立對話. oracle根據儲存愛資料字典的使用者定義對使用者名稱和口令進行驗證.

歸檔重做日誌檔案(archive redo log files):聯機日誌變滿切換時,此程式會將日誌檔案複製到歸檔日誌檔案中.

警報日誌和跟蹤檔案(alert log and trace files):警報日誌是影響例項和資料庫的重要操作的相關資訊記錄:只記錄重要的事件.比如啟動和關閉,更改資料庫的物理結構和更改控制例項的引數,後臺程式會在檢測到錯誤條件時生成跟蹤檔案,有時也報告特定事件.






邏輯資料庫結構

oracle通過表空間的方式將邏輯儲存從物理儲存中抽象出來.表空間邏輯上是段的集合,物理上是一個或多個資料檔案的集合.
使用"關係分析"術語說:段和資料檔案存在多對多關係:可將一個表分佈在多個資料檔案中,一個資料檔案也可能包含多個表的一部分.

段由多個塊組成.

區間(extent):資料檔案中編號連續的一系列塊,通過為段新添區間,段會擴大,這些區間不必相鄰,可以來自作為段所在表空間一部分的任何
資料檔案.




邏輯上講:一個表空間包含多個段,每個段包含多個區間,區間是一組oracle塊.
物理上講:資料檔案由多個作業系統塊組成,一個oracle包含多個作業系統塊.


資料字典:
從邏輯上和物理上描述資料庫及其內容的後設資料,後設資料作為一組段儲存在system和sysaux表空間中.

!不要對資料字典做任何改動!手癢癢去拍牆,別瞎改資料字典

檢視查詢資料字典,大部分檢視有三種:DBA_  ALL_    USER_

USER_字首的檢視描述查詢檢視的使用者擁有的物件
ALL_字首的檢視顯示描述你有權訪問的物件的行
DBA_字首的檢視將顯示資料庫中每個物件的行

表空間和資料檔案之間的關聯在資料庫控制檔案中維護,其中列出所有資料檔案,指明其所屬表空間.如果沒有控制檔案,例項就無法找到資料檔案,無法識別組成SYSTEM表空間的檔案,只有開啟SYSTEM表空間時,例項才可能訪問資料字典,才能開啟資料庫.






來個練習:建立一個表段,計算出它的物理位置

create table testtb (c1 varchar2(10));

確定表所在空間,區間大小,區間所在檔案編號,及其作為區間開始位置的檔案塊:

select tablespace_name,extent_id,bytes,file_id,block_id from dba_extents
where owner='SCOTT' and segment_name='TESTTB'



根據名稱確定檔案,替代前面查詢中的file_id

select name from v$datafile
where file#=:file_id                --file_id=4
---------------------------------------------------------------------------------------------
name
D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF

計算出區間在檔案中的位置(按它在檔案中的開始位元組數)

select block_size * :block_id from dba_tablespaces
where tablespace_name='USERS'           --block_id=314 



可見,表testtb存在於一個64KB區間中,此區間位於檔案D:\ORACLE\PRODUCT\10.2.0\ORADATA\BOB\USERS01.DBF中,從檔案的大約3.4MB處開始.






 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25025926/viewspace-1067689/,如需轉載,請註明出處,否則將追究法律責任。

相關文章