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

相关文章
相关标签/搜索