Oracle 存儲結構


數據庫是存儲數據的容器,它的主要功能是保存和共享數據。

oracle數據庫的存儲結構可以分為邏輯存儲結構和物理存儲結構,對於這兩種存儲結構,oracle是分別進行管理的。

  • 邏輯存儲結構:oracle內部組織和管理數據的方式。
  • 物理存儲結構:oracle外部(操作系統)組織和管理數據的方式。

接下來我們對上面的兩種結構進行詳細的介紹。

1.邏輯存儲結構
 
在這里插入圖片描述
圖 1 Oracle 邏輯存儲結構
 

在這里插入圖片描述
圖 2 Oracle 邏輯存儲結構
 

如圖 1和圖 2 所示,oracle在邏輯上將保存的數據划分為一個個小單元來進行存儲和維護,更高一級的邏輯存儲結構都是由這些基本的小單元組成的。

邏輯結構類型按照尺寸從小到大分可分為:塊(block)-->區(extent)-->段(segment)-->表空間(tablespace)

塊(Block)

Oracle用來管理存儲的最小單元,也是最小的邏輯存儲結構。Oracle數據庫在進行輸入輸出時,都是以塊為單位進行讀寫操作的。我們建議數據塊的尺寸為操作系統塊尺寸的整數倍(1、2、4等)。另外,塊的大小是在創建數據庫的時候決定的,之后不能修改。當然,oracle同時也支持不同的表空間擁有不同的數據塊尺寸。下面,我們對塊的結構進行一些介紹。

塊的頭部信息區:

  • 塊頭:包含塊的一般屬性信息 如塊的物理地址、塊所屬的段的類型。
  • 表目錄:如果塊中存儲的數據是表數據, 則在表目錄中保存塊中所包含的表的相關信息。
  • 行目錄:行記錄的相關信息 如ROWID。
  • 塊的存儲區:主要包含空閑空間和已經使用的空間。Oracle主要是通過下面的兩個參數對這部分空間進行管理的:
    * PCTFREE參數:指定塊中必須保留的最小空閑空間比例。當塊中的空閑存儲空間減少到PCTFREE所設置的比例后,Oracle將塊標記為不可用狀態,新的數據行將不能被加入到這個塊。
    * PCTUSED參數:制定一個百分比,當塊中已經使用的存儲空間降低到這個百分比以下時,這個塊才被重新標記為可用狀態。

注意:以上兩個參數既可以在表空間級別進行設置,也可以在段級別進行設置。段級別的設置優先級更高。

區(Extent)

比塊高一級的邏輯存儲結構,由連續的塊組成,它是oracle在進行存儲空間的分配和回收的最小單位。在創建具有獨立段結構的數據庫對象時,例如表、索引等,Oracle會為數據庫對象創建一個數據段,並為數據段分配一個‘初始區’。

后續區的分配方式,則根據表的空間管理辦法不同,而采用不同的分配方式,例如autoextent,uniform size 或者在創建表或表空間時設置default storage 子句。

另外,用戶還能夠通過執行下面的命令來回收表、索引等對象中未使用的區:

SQL>alter table table_name deallocate unused;

段(Segment)

由多個區組成,這些區可以是連續的,也可以是不連續的。當用戶在數據庫中創建各種具有實際存儲結構的對象時(保存有數據的對象),比如表、索引等,Oracle將為這些對象創建“段”。 一般一個對象只擁有一個段。

在創建段時,可以為它指定PCTFREE、PCTUSED等參數來控制其中的塊的存儲空間管理方式,也可以為它指定INITIAL、NEXT、PCTINCREASE等存儲參數,以指定其中區的分配方式。如果沒有為段指定這些參數,段將自動繼承表空間的相應參數。

不同類型的數據庫對象擁有不同類型的段:

  • 數據段:保存表中的記錄。
  • 索引段:索引中的索引條目。
  • 臨時段:在執行查詢等操作時,Oracle可能會需要使用到一些臨時存儲空間,用於臨時保存解析過的查詢語句以及在排序過程中產生的臨時數據。
  • 回滾段:保存回滾數據。

表空間(Tablespace)

最高級的邏輯存儲結構,數據庫是由多個表空間組成的。在創建數據庫時會自動創建一些默認的表空間,例如 SYSTEM表空間,SYSAUX表空間等。通過使用表空間,Oracle將所有相關的邏輯結構和對象組合在一起。我們可以在表空間級別指定存儲參數,也可以在段級別指定。

下面我們列出常見的表空間,和它們所存儲的信息:

  • 數據表空間:用於存儲用戶數據的普通表空間。
  • 系統表空間:默認的表空間,用於保存數據字典(一組保存數據庫自身信息的內部系統表和視圖,及用於Oracle內部使用的其他一些對象),保存所有的PL/SQL程序的源代碼和解析代碼,包括存儲過程和函數、包、數據庫觸發器等,保存數據庫對象(表、視圖、序列)的定義。
  • 回滾表空間:用於存放回滾段,每個實例最多只能使用一個回滾表空間。
  • 臨時表空間:存儲SQL執行過程中產生的臨時數據。

最后,我們可以用下面的比喻來描述邏輯結構關系:
塊 (一張張白紙) ---> 區(白紙組成的本子)---> 段(多個本子放到一個文件袋中)---> 表空間(存放多個文件袋的文件櫃)

2.物理存儲結構

Oracle數據庫邏輯上由一個或多個表空間組成,每個表空間在物理上由一個或多個數據文件組成,而每個數據文件是由數據塊構成的。所以,邏輯上數據存放在表空間中,而物理上存儲在表空間所對應的數據文件中。我們可以用下圖來描述數據文件和表空間的關系。

在這里插入圖片描述
圖 3 Oracle 邏輯存儲結構和物理存儲結構對應關系
 

在這里插入圖片描述
圖 4 Oracle 邏輯存儲結構和物理存儲結構對應關系
 

構成數據庫的物理文件主要有三種:

  • 數據文件:存放數據庫數據。
  • 控制文件:存放數據庫的基本信息,告訴數據庫到哪里找到數據文件和重做日志文件等。對數據庫的成功啟動和正常運行是很重要的。
  • 重做日志文件:存放對數據的改變。至少兩組,Oracle以循環方式來使用它們。

更多內容請參考:《Oracle 體系結構詳解》


免責聲明!

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



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