oracle 邏輯結構

mcxiaoracle發表於2022-06-22

1.資料塊(Data Blocks)

資料塊是Oracle最小的儲存單位,Oracle資料存放在“塊”中。一個塊佔用一定的磁碟空間。特別注意的是,這裡的“塊”是Oracle的“資料塊”,不是作業系統的“塊”。

Oracle每次請求資料的時候,都是以塊為單位。也就是說,Oracle每次請求的資料是塊的整數倍。如果Oracle請求的資料量不到一塊,Oracle也會讀取整個塊。所以說,“塊”是Oracle讀寫資料的最小單位或者最基本的單位。

塊的標準大小由初始化引數DB_BLOCK_SIZE指定。具有標準大小的塊稱為標準塊(Standard Block)。塊的大小和標準塊的大小不同的塊叫非標準塊(Nonstandard Block)。

作業系統每次執行I/O的時候,是以作業系統的塊為單位;Oracle每次執行I/O的時候,都是以Oracle的塊為單位。

Oracle資料塊大小一般是作業系統塊的整數倍。

資料塊的格式(Data Block Format)

塊中存放表的資料和索引的資料,無論存放哪種型別的資料,塊的格式都是相同的,塊由塊頭(Common and Variable Header),表目錄(Table Directory),行目錄(Row Directory),空餘空間(Free Space)和行資料(Row Data)五部分組成,如下圖

塊頭(Common and Variable Header):存放塊的基本資訊,如:塊的實體地址,塊所屬的段的型別(是資料段還是索引段)。

表目錄(Table Directory):存放表的資訊,即:如果一些表的資料被存放在這個塊中,那麼,這些表的相關資訊將被存放在“表目錄”中。

行目錄(Row Directory):如果塊中有行資料存在,則,這些行的資訊將被記錄在行目錄中。這些資訊包括行的地址等。

行資料(Row Data):是真正存放表資料和索引資料的地方。這部分空間是已被資料行佔用的空間。

空餘空間(Free Space):空餘空間是一個塊中未使用的區域,這片區域用於新行的插入和已經存在的行的更新。

頭部資訊區(Overhead):我們把塊頭(Common and Variable Header),表目錄(Table Directory),行目錄(Row Directory)這三部分合稱為頭部資訊區(Overhead)。頭部資訊區不存放資料,它存放的整個塊的資訊。頭部資訊區的大小是可變的。一般來說,頭部資訊區的大小介於84位元組(bytes)到107位元組(bytes)之間。

當往資料庫中插入(INSERT)資料的時候,塊中的自由空間會減少;當對塊中已經存在的行進行修改(UPDATE)的時候(使記錄長度增加),塊中的自由空間也會減少。

DELETE語句和UPDATE語句會使塊中的自由空間增加。當使用DELETE語句刪除塊中的記錄或者使用UPDATE語句把列的值更改成一個更小值的時候,Oracle會釋放出一部分自由空間。釋放出的自由空間並不一定是連續的。通常情況下,Oracle不會對塊中不連續的自由空間進行合併。因為合併資料塊中不連續的自由空間會影響資料庫的效能。只有當使用者進行資料插入(INSERT)或者更新(UPDATE)操作,卻找不到連續的自由空間的時候,Oracle才會合併資料塊中不連續的自由空間。


是一組連續的資料塊。當一個表、回滾段或臨時段建立或需要附加空間時,系統總是為之分配一個新的資料區。一個資料區不能跨越多個檔案,因為它包含連續的資料塊。使用區的目的是用來儲存特定資料型別的資料,也是表中資料增長的基本單位。在Oracle資料庫中,分配空間就是以資料區為單位的。一個Oracle物件包含至少一個資料區。設定一個表或索引的儲存引數包含設定它的資料區大小。

是由多個資料區構成的,它是為特定的資料庫物件(如表段、索引段、回滾段、臨時段)分配的一系列資料區。段內包含的資料區可以不連續,並且可以跨越多個檔案。使用段的目的是用來儲存特定物件。 
一個Oracle資料庫有4種型別的段: 
資料段:資料段也稱為表段,它包含資料並且與表和簇相關。當建立一個表時,系統自動建立一個以該表的名字命名的資料段。 
索引段:包含了用於提高系統效能的索引。一旦建立索引,系統自動建立一個以該索引的名字命名的索引段。 
回滾段:包含了回滾資訊,並在資料庫恢復期間使用,以便為資料庫提供讀入一致性和回滾未提交的事務,即用來回滾事務的資料空間。當一個事務開始處理時,系統為之分配回滾段,回滾段可以動態建立和撤銷。系統有個預設的回滾段,其管理方式既可以是自動的,也可以是手工的。 
臨時段:它是Oracle在執行過程中自行建立的段。當一個SQL語句需要臨時工作區時,由Oracle建立臨時段。一旦語句執行完畢,臨時段的區間便退回給系統。



3.段(Segment)

是由多個資料區構成的,它是為特定的資料庫物件(如表段、索引段、回滾段、臨時段)分配的一系列資料區。段內包含的資料區可以不連續,並且可以跨越多個檔案。使用段的目的是用來儲存特定物件。 
一個Oracle資料庫有4種型別的段: 
資料段:資料段也稱為表段,它包含資料並且與表和簇相關。當建立一個表時,系統自動建立一個以該表的名字命名的資料段。 
索引段:包含了用於提高系統效能的索引。一旦建立索引,系統自動建立一個以該索引的名字命名的索引段。 
回滾段:包含了回滾資訊,並在資料庫恢復期間使用,以便為資料庫提供讀入一致性和回滾未提交的事務,即用來回滾事務的資料空間。當一個事務開始處理時,系統為之分配回滾段,回滾段可以動態建立和撤銷。系統有個預設的回滾段,其管理方式既可以是自動的,也可以是手工的。 
臨時段:它是Oracle在執行過程中自行建立的段。當一個SQL語句需要臨時工作區時,由Oracle建立臨時段。一旦語句執行完畢,臨時段的區間便退回給系統。

4.表空間(tablespace)



推薦閱讀:















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

相關文章