DB2表空間

 DB2中,表空間是指數據庫以及存儲在數據庫中的表之間的邏輯層。表空間在數據庫中建立,而表在表空間中建立。php

使用表空間的好處:將數據合理的分佈存儲在不一樣的磁盤上或者存儲在磁盤的不一樣位置上,有利於提升存儲效率。數據庫

DB2表空間管理方式:系統管理空間(System Management Space, SMS)和數據庫管理空間(Database Management System, DMS)ide

按照類型分:規則表空間,大對象表空間,系統臨時表空間,用戶臨時表空間post

規則表空間中包含用戶數據的表。默認用戶表空間名爲USERSPACE1,索引也存儲在規則表空間中,另外系統目錄表空間名爲SYSCATSPACE。性能

臨時表空間分爲系統臨時表空間和用戶臨時表空間。this

系統臨時表空間用來存儲各類數據操做(排序、重組表、建立索引、鏈接表)中所須要的內部臨時數據,雖然能夠建立任意多個系統臨時表空間,但建議用戶只是用大多數表所使用的頁大小建立一個, 默認系統臨時表空間名爲TEMPSPACE1。spa

用戶臨時表空間用來存儲已說明全局臨時表(已說明全局臨時表存儲的是應用程序臨時數據)。用戶臨時表空間不是在數據庫建立時默認建立的。操作系統

 

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
orm

相關文章
相關標籤/搜索