Oracle TableSpace介紹
- 簡介
- SYSTEM與Non-SYSTEM TableSpace
- TableSpace的類型:Permanent、Undo、Temporary
- Permanent Tablespace
- Undo Tablespace
- Temporary Tablespace
- Temporary Tablespace是NOLOGGING模式,因此若資料庫損毀,做Recovery不需要恢復Temporary Tablespace。
- Temporary最好是使用Local managed Tablespace
- 若使用local managed模式,UNIFORM SIZE參數最好是Sort_Area_Size的參數,這樣效能比較好。
- Uniform size預設1024K,而Sort_area_size預設是512K
- Temporary Tablespace不能使用local managed的AUTOALLOCATE參數。
- TableSpace的Extent空間管理:Local Managed 與Dictionary Managed
- Local managed tablespace
- Local managed使用bitmaps做空間管理。
- bitmaps中每個bit代表一個data block或者一堆相鄰的data block(extent)
- 從10g開始,SYSTEM Tablespace預設使用local managed -->Oracle建議使用local managed的證據。
- 假如SYSTEM TableSpace是local managed,那麼其他TableSpace必須是local managed。
- 若沒指定使用local managed或者dictionary managed,則預設使用local managed。
- 使用local managed可以增進效能,因為減少了SYSTEM TableSpace的效能競爭。
- 使用local managed則不需要做空間縫合(loalescing),因為相鄰的不同大小的extent,辨識extent使用狀態的bits也在一起 ,Oracle可以直接使用這些相鄰的extent。不需要先進行縫合才可以使用。這也可以增進部份效能。
- local managed的extent空間管理(Extent Management):AUTOALLOCATE與UNIFORM
- Local managed中的Segment的空間管理(Segment Space Management ):AUTO與MANUAL
- Local managed中的Create TableSpace範例
- dictionary managed中的Create TableSpace範例
TableSpace 是Oracle空間管理上的邏輯單位,實體上存放資料的是Tablespace裡面的檔案(Data File);而我們所熟悉的Table就放在這 一個一個的檔案裡面。所以TableSpace可以看成是Data File的群組。通常在管理上會把使用者的資料與Oracle系統的物件以不同的Tablespace做切分 。如果一個Oracle上有多個不同的AP系統,以不同的TableSpace做切割,則可以達到管理與備份的目的。但是TableSpace的功用也不僅僅只是簡單的群組分類而已,Oracle 提供了許多功能上的參數來設定TableSpace來達到空間管理與效能增進的目的。 有必要提的是,TableSpace沒辦法跨資料庫,TableSpace中的Data File沒辦法跨TableSpace,Data File中的Table (Segement)可以跨 Data File,但不能跨TableSpace。簡單的來說,一個Table裡面的資料是有可能因為Oracle的空間分配而分布在同一個TableSpace的 不同的Data File中的;因此一個Data File創出來後,是不能隨便刪除的,這將會造成嚴重的資料損毀的問題。 |
當資料庫剛建立起來,系統會建立一個叫做SYSTEM的系統TableSpace,存放SYS、SYSTEM等User重要的系統資料(ex:資料字典與預儲程序等) 如果我們建立Oracle User時,不指定預設的TableSpace,則此User則會以SYSTEM TableSpace作為預設的TableSpace。 這將造成管理上的混亂與嚴重的效能問題,這是必須特別注意的。 |
|
Local Managed 與Dictionary Managed最主要的分別,在於空間管理方式的不同。Local managed 的管理方式是讓 每個TableSpace自己利用bitmaps去管理他自己的空間,而Dictionary Managed則是利用SYSTEM TableSpace的資料字典來做空間管理。 這兩者最大的不同在於Local managed大大的改善了Oracle做空間管理(例如:產生新的Exten或釋放Extent...等)時,搶奪 SYSTEM TableSpace資源的問題。所以Oracle從8i以後已經朝Local managed的方向去走了,所以我們應該盡量使用Local managed的方式才對,所以Dictionary managed的方式不多做介紹了。
|