數據塊、數據區、數據段、表空間


數據塊 (Data Block)

數據塊是oracle邏輯存儲結構中最小的邏輯單位,也是執行數據庫輸入輸出的最小儲存單位。oracle數據存放在“oracle數據塊”中,而不是“操作系統塊”中。通常oracle數據塊是操作系統塊的整數倍,如果操作系統塊大小為2048B,且oracle數據塊大小為8192B,則表示oracle數據塊由4個操作系統快構成。oracle數據塊有一定的標准大小,其大小被寫入到初始化參數DB_BLOCK_SIZE中。另oracle支持同一庫中使用多種大小的塊,與標准塊大小不同的就是非標准塊。

  可通過v$parameter數據字典來查詢oracle標准塊的大小,

 

 

 

上述代碼中先格式化顯示"name"列和"value"列大小方便同行顯示,后用sql查詢db_block_siae的值value 此時的值就是標准塊的大小。     

  塊頭:存放數據塊的基本信息,如塊的物理地址、塊所屬的段的類型。                  

  表日錄:存放表的相關信息。如果數據塊中存儲的數據是表數據,則表目錄中存儲有關這些表的相關信息。

   行目錄:如果塊中有行數據存在,則這些行的信息將被記錄在行目錄中。這些信息包括行的地址等

   空余空間:空余空間是一個塊中末使用的區域,這片區域用於新行的插入和己經存在的行的更新。

   行數據:用於存放表數據和索引數據的地方,這部分空間己被數據行所占用 (如表中的若干行數據記錄)。                                         

 

通常把塊頭、表目錄、行目錄這3部分組合起來稱為頭部信息區,頭部信息區不存放數據,它存放整個塊的引導信息,起到引導系統讀取數據的作用。
所以頭部信息區若遭到破壞,則Oracle 系統將無法讀取這部分數據。另外,空余空間和行數據共同構成塊的存儲區,用於存放真正的數據記錄

 

 

 

 數據區(Extent)

 

      數據區(也可稱作數據擴展區)是由一組連續的 Oracle 數據塊所構成的 Oracle 存儲結構,一個或多個數據塊組成一個數據區,一個或多個數據區再組成一個段(Segment)。當一個段中的所有空問被使用完后,Oracle 系統將自動為該段分配一個新的數據區,這也正符合 Extent 這個單詞所具有的“擴展”的含義,可見數據區是 Oracle 存儲分配的最小單位,Oracle 就以數據區為單位進行存儲控件的擴展。

         使用數據區的目的是用來保存特定數據類型的數據。數據區是表中數據增長的基本單位,在 Oracle數據庫中,分配存儲空間就是以數據區為單位的。一個Oracle對象包含至少一個數據區。設置一個表或索引的存儲參數包含設置它的數據區大小。

 

段(Segment  )

段是由一個或多個數據區構成的,它不是存儲空間的分配單位,而是一個獨立的邏輯存儲結構,用於存儲表、索引或族等占用空間的數據對象,Oracle也把這種占用空間的數據對象統一稱為段。

一個段只屬於一個特定的數據對象,每當創建一個具有獨立段的數據對象時,Oracle 將為它創建一個段。段是為特定的數據對象(如表、索引、回滾等)分配的一系列數據區。段內包含的數據區可以不連續,並且可以跨越多個文件,使用段的目的是用來保存特定對象。一個 Oracle 數據庫通常有以下 4種類型的段:

  (1)數據段:數據段中保存的是表中的數據記錄。在創建數據表時,Oracle 系統將為表創建數據段。當表中的數據量增大時,數據段的大小自然也隨着變大,數據段的增大過程是通過向其添加新的數據區來實現的。當創建一個表時,系統自動創建一個以該表的名字命名的數據段。

(2)索引段:索引段中包含了用於提高系統性能的索引。一旦建立索引,系統自動創建一個以該索引的名宇命名的索引段。


(3)回滾段:回滾段(也可稱作撤銷段)中保存了回滾條目,Oracle將修改前的舊值保存在回滾條目中。利用這些信息,可以撤銷未提交的操作,以便為數據庫提供讀入一致性利回滾末提交的事務,即用來回滾事務的數據空間。當一個事務開始處理時,系統為之分配回滾段,回滾段可以動態創建和撤銷。Oracle 11g 系統有個默認的回滾段,其管理方式既可以是自動的,也可以是手工的。

(4)臨時段:當執行創建索引、 查詢等操作時,Oracle 可能會使用一些臨時存儲空間,用於暫時性地保存解析過的查詢語句以及在排序過程中產生的臨時數據。Oracle 系統將在專門用於存儲臨時數據的表空間中為操作分配臨時段。在執行 “CREATE INDEX”、“SELECT ORDER BY”、“SELECT DISTINCT” 和“SELECT GROUP BY” 等幾種類型的 SQL 語句時, Oracle 系統就會在臨時表空間中為這些語句的操作分配一個臨時段。

在數據庫管理過程中,若經常需要執行上面這類SQL 語句,最好調整 SORT_AREA_SIZE 初始花參數來增大排序區,從而使排序操作盡量在內存中完成,以獲得更好的執行效率,但同時這對數據庫服務器的內存空間提出了更大的要求。

表空間(Tablespace) 

      oacle 使用表空間將相關的邏輯結構(如段、數據區等)組合在一起,表空間是數據庫的最大邏輯划分區城,通常用來存放數據表、索引、回滾段等數據對象,任何數據對象在創建時都必須被指定儲存在某個表空間中,表空間 (屬邏輯存儲結構)與數據文件(屬物理存儲結構)相對應,一個表空間由一個或多個數據文件組成,一個數據文件只屬於一個表空間;Oracle 數據的存儲空間在邏輯上表現為表空間,而在物理上表現為數據文件。舉個例子來說,表空間相當於操作系統中的文件夾,而數據文件就相當於文件夾中的文件。每個數據庫至少有一個表空間 (即 SXSTEM 表空間),表空間的大小等於所有從屬於他的數據文件大小的總和。

   由於表空間在物理上(即磁盤上) 包含操作系統中的一個或多個數據文件,因此在表空間中創建的數據對象就存在以下兩種情況:

  (1)若表空間只包含一個數據文件,則該表空間中的所有對象都存儲在這個數據文件中
  (2)若表空問包含多個數據文件,則Oracle 即可將數據對象存儲在該表空間的任意一個數據文件中,也可以將同一個數據對象中的數據分布在表空間的多個數據文件中。

在創建數據庫時,Oracle 系統會自動創建多個默認的表空間,這些表空間除了用於管理用戶數據的表空間之外,還包括用於管理 Oracle 系統內部數據(如數據字典)的表空間,下面列舉了 Oracle 11g
默認創建的主要表空間。

 

SYSTEM 系統表空間,
 用於存放Oracle系統內部表和數據字典的數據,如表名、列名、用戶名等。Oracle 本身不贊成將用戶創建的表、索引等存放在系統表空問中。表空間中的數據文件個數
不是固定不變的,可以根據需要向表空間中追加新的數據文件。

通過底朝天、

通過dict 查看數據庫中數據字典信息

 

 

 通過v$fixed_view_definition查看數據庫中內部系統表的信息,

 

           2. SYSAUX 表空間

   SXSAUX 表空間是 Oracle 11g 新增加的表空間,是隨着數據庫的創建而創建的,它充當 SYSTEM的輔助表空間,降低了 SYSTEM 表空間的負荷,主要存儲除數據字典以外的其他數據對象。SYSAUX表空間一般不存儲用戶的數據,由 Oracle 系統內部自動維護。


3. UODO 表空間
撤銷表空間,用於存儲撒銷信息的表空間。當用戶對數據表進行修改操作 (包括插入、更新、刪除等操作)時,Oracle 系統自動使用撤銷表空間來臨時存放修改前的舊數據。當所
做的修改操作完成並執行提交命令后,Oracle 根據系統設置的保留時間長度來決定何時釋放掉撤銷表空間的部分空間。一般在創建 Oracle 實例后,Oracle 系統自動創建一個名字為 “UNDOTBS1” 的撤銷表空間,該撤銷表空間對應的數據文件是 “UNDOTBS01.DBF”。

4. USERS 表空間

USERS 表空間-----用戶表空間,是 Oracle 建議用戶使用的表空間,可以在這個表空間上創建各種數據對象,比如創建表、索引、用戶等數據對象。Oracle 系統的樣例用戶 SCOTT 對象就存放在 USERS表空間中。
除了 Oracle 系統默認創建的表空間外,用戶可根據應用系統的實際情況及其所要存放的對象類型創建多個自定義的表空間,以區分用戶數據與系統數據。此外,不同應用系統的數據應在放在不同的表空間上,而不同表空間的文件應在存放在不同的盤上,從而減少 I/Q 沖突,提高應用系統的操作性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM