Oracle中的儲存層次體系如下:
(1) 資料庫由一個或多個資料表空間組成。
(2) 資料表空間由一個或多個資料檔案組成。這些檔案可以是檔案系統中的cooked檔案、原始分區、ASM管理的資料庫檔案,或叢集檔案系統上的檔案。資料表空間包含段。
(3) 段(TABLE、INDEX等)由一個或多個區段組成。段在資料表空間中,但是可以包含這個資料表空間中多個資料檔案中的資料。
(4) 區段是磁碟上一組邏輯連續的塊。區段只在一個資料表空間中,而且總是在該資料表空間內的一個檔案中。
(5) 塊是資料庫中最小的分配單位,也是資料庫使用的最小I/O單位。
註:
表
空間是一個容器,其中包含有段。每個段都只屬於一個資料表空間。一個資料表空間中可能有多個段。一個給定段的所有區段都在與段相關聯的資料表空間中。段絕對不會跨越表
空間邊界。資料表空間本身可以有一個或多個相關的資料檔案。資料表空間中給定段的一個區段完全包含在一個資料檔案中。不過,段可以有來自多個不同資料檔案的區段。
資料表空間如圖3-3所示。
圖3-3 這個資料表空間包含兩個資料檔案、3個段和4個區段
圖3-3顯示了一個名為USER_DATA的資料表空間。其中包括兩個資料檔案:user_data01和user_data02。並分配了3個段:T1、T2和I1(可能是兩個表和一個索引)。這個資料表空間中分配了4個區段,每個區段表示為邏輯上連續分配的一組資料庫塊。段T1包括兩個區段,分別在不同的檔案中。段T2和I1都各有一個區段。如果這個資料表空間需要更多的空間,可以調整已經分配給資料表空間的資料檔案的大小,或者可以再增加第三個資料檔案。
資料表空間是Oracle中的邏輯儲存容器。作為開發人員,我們會在資料表空間中建立段,而絕對不會深入到原始的“檔案級”。我們可不希望在一個特定的檔案中分配區段(當然這也是可以的,但我們一般都不會這麼做)。相反,我們會在資料表空間中建立對象,餘下的工作都由Oracle負責。如果將來某個時刻DBA決定在磁碟上移動資料檔案,從而使I/O分布得更均勻,這對我們來說沒有任何關係,它根本不會影響我們的處理。