數據庫是存儲數據的容器,它的主要功能是保存和共享數據。sql
oracle數據庫的存儲結構能夠分爲邏輯存儲結構和物理存儲結構,對於這兩種存儲結構,oracle是分別進行管理的。數據庫
接下來咱們對上面的兩種結構進行詳細的介紹。oracle
1.邏輯存儲結構
圖 1 Oracle 邏輯存儲結構
函數
圖 2 Oracle 邏輯存儲結構
ui
如圖 1和圖 2 所示,oracle在邏輯上將保存的數據劃分爲一個個小單元來進行存儲和維護,更高一級的邏輯存儲結構都是由這些基本的小單元組成的。spa
邏輯結構類型按照尺寸從小到大分可分爲:塊(block)-->區(extent)-->段(segment)-->表空間(tablespace)操作系統
塊(Block).net
Oracle用來管理存儲的最小單元,也是最小的邏輯存儲結構。Oracle數據庫在進行輸入輸出時,都是以塊爲單位進行讀寫操做的。咱們建議數據塊的尺寸爲操做系統塊尺寸的整數倍(一、二、4等)。另外,塊的大小是在建立數據庫的時候決定的,以後不能修改。固然,oracle同時也支持不一樣的表空間擁有不一樣的數據塊尺寸。下面,咱們對塊的結構進行一些介紹。日誌
塊的頭部信息區:code
注意:以上兩個參數既能夠在表空間級別進行設置,也能夠在段級別進行設置。段級別的設置優先級更高。
區(Extent)
比塊高一級的邏輯存儲結構,由連續的塊組成,它是oracle在進行存儲空間的分配和回收的最小單位。在建立具備獨立段結構的數據庫對象時,例如表、索引等,Oracle會爲數據庫對象建立一個數據段,併爲數據段分配一個‘初始區’。
後續區的分配方式,則根據表的空間管理辦法不一樣,而採用不一樣的分配方式,例如autoextent,uniform size 或者在建立表或表空間時設置default storage 子句。
另外,用戶還可以經過執行下面的命令來回收表、索引等對象中未使用的區:
SQL>alter table table_name deallocate unused;
段(Segment)
由多個區組成,這些區能夠是連續的,也能夠是不連續的。當用戶在數據庫中建立各類具備實際存儲結構的對象時(保存有數據的對象),好比表、索引等,Oracle將爲這些對象建立「段」。 通常一個對象只擁有一個段。
在建立段時,能夠爲它指定PCTFREE、PCTUSED等參數來控制其中的塊的存儲空間管理方式,也能夠爲它指定INITIAL、NEXT、PCTINCREASE等存儲參數,以指定其中區的分配方式。若是沒有爲段指定這些參數,段將自動繼承表空間的相應參數。
不一樣類型的數據庫對象擁有不一樣類型的段:
表空間(Tablespace)
最高級的邏輯存儲結構,數據庫是由多個表空間組成的。在建立數據庫時會自動建立一些默認的表空間,例如 SYSTEM表空間,SYSAUX表空間等。經過使用表空間,Oracle將全部相關的邏輯結構和對象組合在一塊兒。咱們能夠在表空間級別指定存儲參數,也能夠在段級別指定。
下面咱們列出常見的表空間,和它們所存儲的信息:
最後,咱們能夠用下面的比喻來描述邏輯結構關係:
塊 (一張張白紙) ---> 區(白紙組成的本子)---> 段(多個本子放到一個文件袋中)---> 表空間(存放多個文件袋的文件櫃)
2.物理存儲結構
Oracle數據庫邏輯上由一個或多個表空間組成,每一個表空間在物理上由一個或多個數據文件組成,而每一個數據文件是由數據塊構成的。因此,邏輯上數據存放在表空間中,而物理上存儲在表空間所對應的數據文件中。咱們能夠用下圖來描述數據文件和表空間的關係。
圖 3 Oracle 邏輯存儲結構和物理存儲結構對應關係
圖 4 Oracle 邏輯存儲結構和物理存儲結構對應關係
構成數據庫的物理文件主要有三種:
更多內容請參考:《Oracle 體系結構詳解》