資料表空間是資料庫及儲存在該資料庫中的表之間的邏輯層。資料表空間在資料庫中建立,表在資料表空間中建立。
使用資料表空間的一個明顯的好處是能夠把資料合理的分布儲存在不同的磁碟上或者儲存在磁碟的不同位置上,有助於提高資料存取的效率。
DB2 的資料表空間按管理方式分為兩種:系統管理空間(System Management Space,SMS)和資料庫管理空間(Database Management Space,DMS)。
按類型分為:規則資料表空間、大對象資料表空間、系統暫存資料表空間、使用者暫存資料表空間。
規則資料表空間中包含使用者資料的表。預設使用者資料表空間名為USERSPACE1,索引也儲存在規則資料表空間中,另外系統目錄表也放在規則資料表空間中。預設的系統目錄資料表空間名為SYSCATSPACE。
暫存資料表空間分為系統暫存資料表空間和使用者暫存資料表空間。
系統暫存資料表空間用來儲存各種資料操作(排序、重組表、建立索引、串連表)中所需的內部臨時資料,雖然可以建立任意多個系統暫存資料表空間,但建議使用者只使用大多數表所使用的頁大小建立一個,預設系統暫存資料表空間名為TEMPSPACE1。
使用者暫存資料表空間用來儲存已說明全域暫存資料表(已說明全域暫存資料表儲存的是應用程式臨時資料)。使用者暫存資料表空間不是在資料庫建立時預設建立的。
SMS每個容器是作業系統的檔案空間中的一個目錄;DMS每個容器是一個固定的、預分配的檔案,或是物理裝置。
SMS的管理比較簡單,由作業系統自動管理,空間的大小隨資料量的變化系統自動調整。
DMS是由資料庫管理的,空間大小在建立時確定,空間不夠時要手工添加或刪除部分資料以釋放空間。
大多數情況下,DMS的效能比SMS好。
用命令列方式建立SMS資料表空間的簡單文法:
CREATE TABLESPACE <NAME> MANAGED BY SYSTEM USING ('<path>')
例一:在Windows上建立一個SMS資料表空間:
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM USING ('d:/acc_tbsp','e:/acc_tbsp','f:/acc_tbsp')
完成的結果為在D、E、F三個磁碟上建立了三個名稱為acc_tbsp的檔案夾,每個檔案夾下面都有一個名為SQLTAG.NAM的檔案。
例二:刪除例一所建立的SMS資料表空間。
DROP TABLESPACE RESOURCE
運行完這條命令,相應的資料表空間會從DB2註冊表中刪除,但是磁碟上的三個檔案夾仍然存在,需要手工刪除。
用命令列方式建立DMS資料表空間的簡單文法:
CREATE TABLESPACE <NAME> MANAGED BY DATABASE USING (FILE '<path>' <size>)
或者
CREATE TABLESPACE <NAME> MANAGED BY DATABASE USING (DEVICE '<path>' <size>)
例三:在Windows上建立一個DMS資料表空間,使用各自有5000頁的兩個檔案容器:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (FILE 'd:/db2data/acc_tbsp' 5000, FILE 'e:/db2data/acc_tbsp' 5000)
運行結果為:在D、E磁碟的db2data檔案夾下面各建立了一個名為acc_tbsp的檔案,大小都為20000K(預設情況下每頁大小為4K)。
例四:在例三所建立的資料表空間中添加一個容器。
ALTER TABLESPACE RESOURCE ADD(FILE 'f:/db2data/acc_tbsp' 5000)
啟動並執行結果為在RESOURCE資料表空間中包含了三個容器(檔案):d:/db2data/acc_tbsp、 e:/db2data/acc_tbsp、 f:/db2data/acc_tbsp。
例五:用RESIZE子句更改例三所建立的資料表空間的容器的大小。
ALTER TABLESPACE RESOURCE RESIZE (file 'd:/db2data/acc_tbsp' 8000, file 'e:/db2data/acc_tbsp' 8000, file 'f:/db2data/acc_tbsp' 8000)
每個容器(檔案)的大小變為8000頁。把容器的容量變大不會出錯,但是如果容器中的資料已經充滿,再把容器的容量縮小,則會引起錯誤。
例六:用EXTEND子句更改例三所建立的資料表空間的容器的大小。
ALTER TABLESPACE RESOURCE EXTEND (file 'd:/db2data/acc_tbsp' 1000, file 'e:/db2data/acc_tbsp' 1000, file 'f:/db2data/acc_tbsp' 1000)
該命令的運行結果為在原有容量的基礎之上,每個容器再增加1000頁。
例七:刪除例三中建立的DMS資料表空間。
DROP TABLESPACE RESOURCE
啟動並執行結果為在DB2的註冊表中把RESOURCE資料表空間刪除,同時在磁碟上把相對應的檔案夾和檔案都一起自動刪除。
例八:在UNIX上建立一個DMS資料表空間,使用各有10000頁的3個邏輯卷:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (DEVICE '/dev/rdblv6' 10000, DEVICE '/dev/rdblv7' 10000, DEVICE '/dev/rdblv8' 10000)
上面語句中提到的UNIX裝置必須已經存在,且執行個體擁有者和SYSADM組必須能夠寫入它們。
SMS與DMS的對比
特性 SMS DMS
能夠在資料表空間中動態增加容器的數目嗎 N Y
能夠把索引資料存放到不同資料表空間的表中嗎 N Y
能夠把大對象資料存放到不同資料表空間的表中嗎 N Y
表可以分散存放到多個資料表空間中嗎 N Y
僅在需要時才分配空間嗎 Y N
資料表空間可以被放在不同的磁碟中嗎 Y N
建立之後,區段大小能夠改變嗎 N N
例九:建立系統暫存資料表空間。
CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp MANAGED BY SYSTEM USING(‘d:/tmp_tbsp’,’e:/tmp_tbsp’)
系統暫存資料表只能儲存在系統暫存資料表空間中,所以資料庫必須始終至少有一個系統暫存資料表空間。
例十:建立使用者暫存資料表空間。
CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE USING(FILE ‘d:/db2data/user_tbsp’ 5000, FILE ‘e:/db2data/user_tbsp’ 5000)
使用者暫存資料表空間用於儲存已說明的暫存資料表(用 DECLARE GLOBAL TEMPORARY TABLE 語句定義)
例十一:用RENAME語句給資料表空間重新命名
RENAME TABLESPACE RESOURCE TO RES1
用該語句給資料表空間重新命名之後,將自動更改所有引用該資料表空間的目錄記錄,所以無須關心該資料表空間中的個別對象。
例十二:在RESOURCE資料表空間中建立一張名為T1的表
CREATE TABLE T1(ABC INT) IN RESOURCE