天天看點

oracle 控制檔案 資料檔案 日志檔案

1、控制檔案 (control files)

參數檔案init.ora 記錄了控制檔案的位置,控制檔案是一個非常小的二進制檔案,最大可以增長到64mb,控制檔案包括如下主要資訊:

·資料庫的名字,檢查點資訊,資料庫建立的時間戳

·所有的資料檔案,聯機日志檔案,歸檔日志檔案資訊

·備份資訊等

有了這些資訊,oracle 就知道那些檔案是資料檔案,現在的重做日志檔案是哪些,這些都是系統啟動和運作的基本條件,是以他是oracle 運作的根本。如果沒有控制檔案系統是不可能啟動的。控制檔案是非常重要的,一般采用多個鏡相複制來保護控制檔案,或采用raid 來保護控制檔案。控制檔案的丢失,将使資料庫的恢複變的很複雜。控制檔案資訊可以從v$controlfile 中查詢獲得

2、資料檔案(data files)

資料檔案的詳細資訊記載在控制檔案中

可以通過如下方式檢視資料檔案

sql> select name from v$datafile;

資料檔案是oracle 中最重要的實體檔案,直接記錄了使用者資料。按照使用上的不同,可以把資料檔案分成如下幾類:

·系統資料檔案

·復原資料檔案

·臨時資料檔案

·使用者資料檔案

以上各類檔案分别屬于不同性質的表空間。

3、重做日志檔案(redo files)

使用者對資料庫進行的任何操作都會記錄在重做日志檔案。在了解重做日志之前必須了解重做日志的兩個概念,重做日志組和重做日志組成員(member),一個 資料庫中至少要有兩個日志組檔案,一組寫完後再寫另一組,即輪流寫。每個日志組中至少有一個日志成員,一個日志組中的多個日志成員是鏡相關系,有利于日志 檔案的保護,因為日志檔案的損壞,特别是目前聯機日志的損壞,對資料庫的影響是巨大的。

聯機日志組的交換過程叫做切換,需要特别注意的是,日志切換在一個優化效果不好的資料庫中會引起臨時的“挂起”。挂起大緻有兩種情況:

·在歸檔情況下,需要歸檔的日志來不及歸檔,而聯機日志又需要被重新利用

·檢查點事件還沒有完成(日志切換引起檢查點),而聯機日志需要被重新利用

4、歸檔日志檔案(archived files)

oracle 可以運作在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模式,當然你就不會有歸檔日志,但是,你的系統将不會是一個實用系統,特别是不能用于生産系 統,因為你可能會丢失資料。但是在歸檔模式中,為了儲存使用者的所有修改,在重做日志檔案切換後和被覆寫之間系統将他們另外儲存成一組連續的檔案系列,該文 件系列就是歸檔日志檔案。

有人或許會說,歸檔日志檔案占領我大量的硬碟空間,其實,具體想一想,你是願意浪費一點磁盤空間來保護你的資料,還是願意丢失你的資料呢?顯而義見,我們 需要保證我們的資料的安全性。其實,歸檔并不是一直占領你的磁盤空間,你可以把她備份到錄音帶上,或删除上一次完整備份前的所有日志檔案。通過 v$archived_log 和v$log_history 可以檢視歸檔日志檔案的資訊。

1、表空間(tablespace)

表空間是資料庫中的基本邏輯結構,一系列資料檔案的集合。一個表空間可以包含多個資料檔案,但是一個資料檔案隻能屬于一個表空間。

在8i 以前,表空間的管理類型隻有一種,被稱為字典管理表空間(dmt),即在資料字典中管理表空間中的空間的配置設定。在8i

以後的版本,為了減少在字典上的開銷,引入了本地管理的表空間(lmt),在該類型的表空間中,在每個資料檔案中存儲的位圖來管理空間的配置設定,不再要求使

用資料字典。本地管理的表空間有速度快,無碎片等衆多優點,建議使用者表空間都實作本地管理。

通過v$tablespace 可以查詢表空間,dba_tablespace 可以查詢詳細表空間資訊。

2、段(segment)

段是對象在資料庫中占用的空間,雖然段和資料庫對象是一一對應的,但段是從資料庫存儲的角度來看的。一個段隻能屬于一個表空間,當然一個表空間可以有多個

段。

表空間和資料檔案是實體存儲上的一對多的關系,表空間和段是邏輯存儲上的一對多的關系,段不直接和資料檔案發生關系。一個段可以屬于多個資料檔案,關于段

可以指定擴充到哪個資料檔案上面。段基本可以分為以下四種

·資料段(data segment)

·索引段(index segment)

·復原段(rollback segment)

·臨時段(temporary segment)

通過dba/all/user_segments 可以查詢詳細的段資訊。

3、區間(extent)

關于extent

的翻譯有多種解釋,有的譯作擴充,有的譯作盤區,我這裡通常譯為區間。在一個段中可以存在多個區間,區間是為資料一次性預留的一個較大的存儲空間,直到那

個區間被用滿,資料庫會繼續申請一個新的預留存儲空間,即新的區間,一直到段的最大區間數(max extent)或沒有可用的磁盤空間可以申請。

在oracle8i 以上版本,理論上一個段可以無窮個區間,但是多個區間對oracle 卻是有性能影響的,oracle

建議把資料分布在盡量少的區間上,以減少oracle 的管理與磁頭的移

動,但是在某些特殊情況下,需要把一個段分布在多個資料檔案或多個裝置上,适當的加多區間數也是有很大好處的。

通過dba/all/user_extents 可以查詢詳細的區間資訊。

4、 oracle 資料塊(block)

oracle 最基本的存儲機關,在建立資料庫的時候指定,雖然在初始化檔案中可見,但是不能修改。為了保證存取的速度,它是os

資料塊的整數倍。oracle 的操作都是以塊為基本機關,一個區間可以包含多個塊,如果區間大小不是塊大小的整數倍,oracle

實際也擴充到塊的整數倍。

塊的内部結構與資料的存取方法都是比較複雜的,以表段的塊為例,從簡單的結構上劃分,可以把塊的内部劃分成如下幾個部分:公用頭,表目錄,行目錄,可存取

空間等。