資料庫裡面的物件是以Segment形式存儲在Tablespace中。每個Segment都包含一個或多個Extent。Extent是由相鄰的Data Block組成,這意味著每個Eextent只能存在於一個Data File中,無法跨越不同Data File,Data Block是資料庫中最小
的 I/O 單元。
區段(Segment)是指特定邏輯上需要的結構,在Oracle的邏輯定義裡,所有Oracle的邏輯結構裡面的東西統稱「物件(Object)」但有些Oracle物件(Object)是需要空間存放就叫做區段(Segment),舉個例子視觀表(view)是由表格所組合而成的,因此它只是一個存放在資料庫字典(Data Dictionary)裡面的一個定義,並不佔有實際空間所以視觀表(view)是一個物件(Object),而表格(Table)需要實際空間來存放資料的物件(Object)因此表格(Table)也是屬於一個區段(Segment)。
當一個區段(Segment)被建置起來時會先以建置時的參數為主,如沒設會以所在的表格空間(Tablespace)為主最後是以當初建置資料庫的參數為主。而區段(Segment)主要分為四大類如下表:
Segment類型 | 儲 存 物 件 |
資料區段(Data Segment) | Oracle資料庫中所有的表格(Table)都是存放在資料區段(Data Segment)裡面。 |
索引區段(Index Segment) | Oracle資料庫中所有的索引(Index)都是存放在索引區段(Index Segment)裡面。 |
倒回區段(Undo Segment) | 存放倒回(Rollback)資料的相關資訊,已維持資料庫的一致性。 |
暫時區段(Temporary Segment) | 主要是存放當SQL Statement需要作排序(Sorting)動作時無法完全使用記憶體做排序,而使用磁碟上的空間來做排序的動作,Oracle資料庫就會配置暫時區段(Temporary Segment)來執行排序作業。 |
Extent
Extent是Oracle用一組Data File來管理得磁碟空間也就是Tablespace,以代表Oracle可用的磁碟上的空間。一組連續的Data Block稱為一個Extent;一組Extent則稱為Segment。Segment可包含任何可暫空間的物件,當一個Extent被填滿時,Segment就會開始使用另一個Extent。Extent注意事項
- Extent是Oracle配置空間的最小單位。
- Segment是由一個或多個Extent組成的
- 當Segment被建置起來時最少包含一個Extent。
- 當Segment長大時,是指Extent被加到Segment中。
- 一個Extent是一組連續的Oracle Data Block所組成的指的是在作業系統上的區塊是連續在一起,此觀念非常重要因為之前所介紹的表格空間或是資料檔等都不需要連續的空間。
- Extent不可跨越Data File。
- 當表格空間被建置起來的時候會有兩個元素:
- 資料檔的檔頭會記錄使用的Extent空間有多少。
- 還有多少可使用的Extent
- 當新建置一個表格空間一開始是由一個檔頭和一大塊空的空間,如果需要空間再由空的部分去切。當空的用完了就必須再擴充一塊新Extent。
Data Block
Data Block由一個或數個作業系統區塊(O/S blocks)所組合而成的,Data Block大小在Oracle 8i是只能一種大小的格式且在create database之後就不能在更改了,但Oracle 9i之後可以擁有5種大小的格式。
Data Block由一個或數個作業系統區塊(O/S blocks)所組合而成的,Data Block大小在Oracle 8i是只能一種大小的格式且在create database之後就不能在更改了,但Oracle 9i之後可以擁有5種大小的格式。
Data Block注意事項
- Data Block是Oracle裡存取資料最小的單位,也是資料庫裡最小的邏輯單元,同時Data Block是由一個或多個作業系統區塊(O/S blocks)所組合而成的,所以也就是說是讀取或是寫入都是以Data Block為單位來進行的例如如果需要一筆資料,這筆資料可能只有2k而已,但是當Oracle讀取資料時不會只讀取 2k會讀取一個Data Block。
- Data Block必須是作業系統區塊(O/S blocks)的倍數 to 避免不必要的 I/O。
- 最大的Data Block要視作業系統而訂。
- Oracle對I/O最小的單位是Data Block但空間配置最小的單位是Extent。
當以正常的方式去新增資料到Segment時,Oracle會先去問這個Segment的第一個Data Block也就是區段檔頭(Segment Header),在檔頭裡面有一個東西叫Free List,Oracle會先去問Free List這裡面有沒有空的Data Block,所謂空的Data Block就是還有空的空間做新增資料的Data Block,如果有就會拿來用,如果新增資料到一半時空的Data Block用完了,就會向Oracle再要一個Extent。 - Data Block組成結構。如圖所示
- Header:包含4個結構
- 管理結構:管控這個Data Block的空間。
- 表格指引(Table Direction):這個Data Block裡面,存放哪些表格(Table)的資料原則上一個Data Block只能存放一個表格(Table)的資料,如果它存放兩個table以上的資料就代表是叢集表格(Cluster Table)。
- 資料指引(Row Direction):這個Data Block裡面存放有哪些資料,這些資料指引(Row Direction)會指向實際資料的位置。
- Transaction Slot:Transaction Slot主要是用來控制這個Data Block同時可以被幾個transaction做DML,也就是說當Transaction要對此block做DML,必須先要到Block Header取得slot如果slot滿了就必須等到有空的slot。
- Free space:空的可隨時使用的空間
- Data:已被存放資料的空間
沒有留言:
張貼留言