DB2表空間管理
表空間是資料庫及儲存在該資料庫中的表之間的邏輯層。表空間在資料庫中建立,表在表空間中建立。
使用表空間的一個明顯的好處是能夠把資料合理的分佈儲存在不同的磁碟上或者儲存在磁碟的不同位置上,有助於提高資料存取的效率。
DB2 的表空間按管理方式分為兩種:系統管理空間(System Management Space,SMS)和資料庫管理空間(Database Management Space,DMS)。
按型別分為:規則表空間、大物件表空間、系統臨時表空間、使用者臨時表空間。
規則表空間中包含使用者資料的表。預設使用者表空間名為USERSPACE1,索引也儲存在規則表空間中,另外系統目錄表也放在規則表空間中。預設的系統目錄表空間名為SYSCATSPACE。
臨時表空間分為系統臨時表空間和使用者臨時表空間。
系統臨時表空間用來儲存各種資料操作(排序、重組表、建立索引、連線表)中所需的內部臨時資料,雖然可以建立任意多個系統臨時表空間,但建議使用者只使用大多數表所使用的頁大小建立一個,預設系統臨時表空間名為TEMPSPACE1。
使用者臨時表空間用來儲存已說明全域性臨時表(已說明全域性臨時表儲存的是應用程式臨時資料)。使用者臨時表空間不是在資料庫建立時預設建立的。
SMS每個容器是
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