Oracle資料表空間設計
資料表空間設計原則:
1. 為表和索引分配不同的tablespace。
2. 為正式表和曆史表分配不同的tablespace,提高資料的安全性。
3. 為大資料量表單獨分配tablespace。
4. 將唯讀表或以讀取為主的表單獨分配tablespace。
5. 以高頻率更新的表分成一組,單獨分配tablespace。
6. 存於同一個 tablespace中的表(或索引)的extent 大小最好成倍數關係,有利於空間的重利用和減少片段。
7. 為不同類型的資料分配不同的資料表空間,這樣既可以提高資料庫輸入輸出效能,也有利於資料的備份和恢複等管理工作。因為我們資料庫管理員在備份或者恢複資料的時候,可以按資料表空間來備份資料。如在設計一個大型的分銷系統後台資料庫的時候,我們可以按省份建立資料表空間。與浙江省相關的資料檔案放置在浙江省的資料表空間中,北京發生業務記錄,則記錄在北京這個資料表空間中。如此,當浙江省的業務資料出現錯誤的時候,則直接還原浙江省的資料表空間即可。很明顯,這樣設計,當某個資料表空間中的資料出現錯誤需要恢複的時候,可以避免對其他資料表空間的影響。
資料表空間設計注意:
1. 合理利用資料表空間大小。根據不同的資料表空間設計意圖,結合實際情況,分配不同的資料表空間大小。
2. 合理利用伺服器空間。根據實際情況,可以為不同的資料表空間配置不同儲存位置。
設計:
1. 因為系統配置表以讀取為主,故單獨分配資料表空間:TS_SYS_DATA。
2. 為系統配置表索引分配單獨資料表空間:TS_SYS_INDEX.
3. 為使用者動作表分配單獨表空:TS_MAIN_DATA,使用者預設資料表空間。
4. 為使用者動作表索引分配單獨資料表空間:TS_MAIN_INDEX。
5. 為使用者操作的大數量表分配單獨資料表空間:TS_MAIN_BIG_DATA。
6. 為使用者操作曆史表分配單獨資料表空間:TS_HIS_DATA。
7. 為使用者操作大資料量曆史表分配單獨資料表空間:TS_HIS_BIG_DATA。
8. 為使用者操作的曆史表索引分配單獨的資料表空間:TS_HIS_INDEX。
9. 建立暫存資料表空間:TS_TEMP。
建立資料表空間sql語句介紹:
方式一、
CREATE TABLESPACE TS_MAIN_DATA
DATAFILE'D:\oracle\oradata\TS_MAIN_DATA' size 500M
EXTENT MANAGEMENT LOCALAUTOALLOCATE
/
方式二、
CREATETABLESPACE TS_HIS_DATA
DATAFILE 'D:\oracle\oradata\TS_HIS_DATA'size 1000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M
/
方式三、
CREATETABLESPACE PROJECT_MAIN_DATA
DATAFILE
'E:\Oracle_DBData\PROJECT\PROJECT_DAT01' SIZE1990M REUSE AUTOEXTEND OFF,
'E:\Oracle_DBData\PROJECT\PROJECT_DAT02' SIZE1990M REUSE AUTOEXTEND OFF,
'E:\Oracle_DBData\PROJECT\PROJECT_DAT03' SIZE1990M REUSE AUTOEXTEND OFF,
'E:\Oracle_DBData\PROJECT\PROJECT_DAT04' SIZE1990M REUSE AUTOEXTEND OFF
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M
/
extent是“區間”的意思。在oracle資料庫中,extentmanagement 有兩種方式 extent management local(本地管理); extentmanagement dictionary(資料字典管理);預設的是local。每種也有兩種大小增長方式:
uniform:預設為1M大小,在temp資料表空間裡為預設的,但是不能被應用在undo資料表空間。
本地管理資料表空間與字典管理資料表空間相比大大提高了管理效率和資料庫效能,其優點如下:
1. 減少了遞迴空間管理
本地管理資料表空間是自己管理分配,而不是象字典管理資料表空間需要系統來管理空間分配,本地資料表空間是通過在資料表空間的每個資料檔案中維持一個位元影像來跟蹤在此檔案中塊的剩餘空間及使用方式。並及時做更新。這種更新只對錶空間的額度情況做修改而不對其他資料字典表做任何update操作,所以不會產生任何回退資訊,從而大大減少了空間管理,提高了管理效率。同時由於本地管理資料表空間可以採用統一大小分配方式(UNIFORM),因此也大大減小了空間管理,提高了資料庫效能。
2. 系統自動管理extents大小或採用統一extents大小
本地管理資料表空間有自動分配(AUTOALLOCATE)和統一大小分配(UNIFORM)兩種空間分配方式,自動分配方式(AUTOALLOCATE)是由系統來自動決定extents大小,而統一大小分配(UNIFORM)則是由使用者指定extents大小。這兩種分配方式都提高了空間管理效率。
3. 減少了資料字典之間的競爭
因為本地管理資料表空間通過維持每個資料檔案的一個位元影像來跟蹤在此檔案中塊的空間情況並做更新,這種更新只修改資料表空間的額度情況,而不涉及到其他資料字典表,從而大大減少了資料字典表之間的競爭,提高了資料庫效能。
4. 不產生回退資訊
因為本地管理資料表空間的空間管理除對錶空間的額度情況做更新之外不修改其它任何資料字典表,因此不產生回退資訊,從而大大提高了資料庫的運行速度。
5. 不需合并相鄰的剩餘空間
因為本地管理資料表空間的extents空間管理會自動跟蹤相鄰的剩餘空間並由系統自動管理,因而不需要去合并相鄰的剩餘空間。同時,本地管理資料表空間的所有extents還可以具有相同的大小,從而也減少了空間片段。
6. 減少了空間片段
7. 對暫存資料表空間提供了更好的管理
autoallocate:
You can convert a tablespace from dictionary extent management to local extentmanagement
and back with the Oracle-supplied PL/SQL package DBMS_SPACE_ADMIN. The SYSTEM
tablespace and any temporary tablespaces, however, cannot be converted fromlocal to the
older style dictionary managem
兩種extent管理方式是可以相互轉換的,利用PL/SQL DBMS_SPACE_ADMIN
但是系統資料表空間和暫存資料表空間不能從local管理轉化到dictionary管理。