IBM db2数据库表空间管理—实例讲解之精华
IBM db2数据库表空间管理—实例讲解之精华
表空间按管理方式分:
操作系统管理(SMS),或者由数据库管理(DMS),自动存储表空间
(System Management Space,SMS)(Database Management Space,DMS)。
按类型分为:规则表空间、大对象表空间、系统临时表空间、用户临时表空间。规则表空间中包含用户数据的表。默认用户表空间名为USERSPACE1,索引也存储在规则表空间中,另外系统目录表也放在规则表空间中。默认的系统目录表空间名为SYSCATSPACE。
临时表空间分为系统临时表空间和用户临时表空间。
系统临时表空间用来存储各种数据操作(排序、重组表、创建索引、连接表)中所需的内部临时数据,虽然可以创建任意多个系统临时表空间,但建议用户只使用大多数表所使用的页大小创建一个,默认系统临时表空间名为TEMPSPACE1。
用户临时表空间用来存储已说明全局临时表(已说明全局临时表存储的是应用程序临时数据)。用户临时表空间不是在数据库创建时默认创建的。
SMS每个容器是操作系统的文件空间中的一个目录;DMS每个容器是一个固定的、预分配的文件,或是物理设备。
SMS的管理比较简单,由操作系统自动管理,空间的大小随数据量的变化系统自动调整。
DMS是由数据库管理的,空间大小在创建时确定,空间不够时要手工添加或删除部分数据以释放空间。
大多数情况下,DMS的性能比SMS好。
1、系统管理空间(SMS)
数据存放在文件系统的文件中
使用操作系统的标准I/O函数来访问数据
除非需要,否则空间不会被额外分配
适用于小型,个人数据库以及存储空间变化频繁的数据库
对维护和监控要求较低
[color=darkred][i][ibmdb2]/root #chown -R db2inst2:db2grp2 /db2data
[ibmdb2]/root #chmod -R 775 /db2data
[ibmdb2]/root #
---例一:创建一个SMS表空间:su - db2inst2
unix:
CREATE TABLESPACE tbs1 MANAGED BY SYSTEM USING ('/db2data/tbs1')
windows:
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM USING ('d:\acc_tbsp','e:\acc_tbsp','f:\acc_tbsp')
完成的结果为在D、E、F三个磁盘上创建了三个名称为acc_tbsp的文件夹,每个文件夹下面都有一个名为SQLTAG.NAM的文件。
[color=darkred][i]db2 => CREATE TABLESPACE tbs1 MANAGED BY SYSTEM USING ('/db2data/tbs1')
DB20000I The SQL command completed successfully.
./tbs1:
total 4
4 -rw------- 1 db2inst2 db2grp2 512 Oct 19 04:26 SQLTAG.NAM----例二:删除例一所创建的SMS表空间
db2 => drop tablespace tbs1
DB20000I The SQL command completed successfully.
运行完这条命令,相应的表空间会从DB2注册表中删除,但是磁盘上的三个文件夹仍然存在,需要手工删除。
2、数据库管理空间(DMS)数据存储在文件或者Raw设备中能够绕过操作系统的I/O函数从而增加性能
适用于对数据库性能要求比较高的应用程序
需要较频繁的维护和监控
用命令行方式创建DMS表空间的简单语法:
[color=darkred][i] CREATE TABLESPACE ;
MANAGED BY DATABASE USING (FILE ' ;'
或者
CREATE TABLESPACE ;
MANAGED BY DATABASE USING (DEVICE ' ;' 当容器空间不足时,可以通过设置参数来自动增加容器空间
[color=darkred][i]CREATE TABLESPACE tbsp2
PAGESIZE 8K
MANAGED BY DATABASE
USING (FILE ' /storage/dms1' 10 M) AUTORESIZE YES
----例三:在Windows上创建一个DMS表空间,使用各自有500页的两个文件容器:
[i][color=darkred]CREATE TABLESPACE TBS MANAGED BY DATABASE USING (FILE '/db2data/tbs_01' 500, FILE '/db2data/tbs_02' 500)运行结果为:在D、E磁盘的db2data文件夹下面各创建了一个名为acc_tbsp的文件,大小都为2000K(默认情况下每页大小为4K)。
[color=darkred][i][color=magenta]db2 => create tablespace tbs managed by database using (file '/db2data/tbs_01' 500, file '/db2data/tbs_02' 500)
DB20000I The SQL command completed successfully.
[db2inst2@ibmdb2 db2data]$ ls -lsa
total 4036
4 drwxrwxr-x 3 db2inst2 db2grp2 4096 Oct 19 04:39 .
8 drwxr-xr-x 27 root root 4096 Oct 18 15:45 ..
16 drwxrwxr-x 2 db2inst2 db2grp2 16384 Aug 29 14:02 lost+found
2004 -rw------- 1 db2inst2 db2grp2 2048000 Oct 19 04:39 tbs_012004 -rw------- 1 db2inst2 db2grp2 2048000 Oct 19 04:39 tbs_02
----例四:在例三所创建的表空间中添加一个容器:[color=magenta][i]alter tablespace tbs add(file '/db2data/tbs_03' 500)
[color=darkred][i]db2 => alter tablespace tbs add(file '/db2data/tbs_03' 500)
DB20000I The SQL command completed successfully.
[db2inst2@ibmdb2 db2data]$ ls -ls
total 6028
16 drwxrwxr-x 2 db2inst2 db2grp2 16384 Aug 29 14:02 lost+found
2004 -rw------- 1 db2inst2 db2grp2 2048000 Oct 19 04:39 tbs_01
2004 -rw------- 1 db2inst2 db2grp2 2048000 Oct 19 04:40 tbs_02
2004 -rw------- 1 db2inst2 db2grp2 2048000 Oct 19 04:40 tbs_03
----例五:用RESIZE子句更改例三所创建的表空间的容器的大小:
每个容器(文件)的大小变为550页。把容器的容量变大不会出错,但是如果容器中的数据已经充满,再把容器的容量缩小,则会引起错误。
[color=darkred][i][color=darkred][i]alter tablespace tbs resize (file '/db2data/tbs_01' 550, file '/db2data/tbs_02' 550, file '/db2data/tbs_03' 550)db2 => alter tablespace tbs resize (file '/db2data/tbs_01' 550, file '/db2data/tbs_02' 550, file '/db2data/tbs_03' 550)
DB20000I The SQL command completed successfully.
[color=magenta][db2inst2@ibmdb2 db2data]$ ls -lsk
total 6628
16 drwxrwxr-x 2 db2inst2 db2grp2 16 Aug 29 14:02 lost+found
2204 -rw------- 1 db2inst2 db2grp2 2200 Oct 19 04:47 tbs_01
2204 -rw------- 1 db2inst2 db2grp2 2200 Oct 19 04:47 tbs_02
2204 -rw------- 1 db2inst2 db2grp2 2200 Oct 19 04:47 tbs_03
----例六:用EXTEND子句更改例三所创建的表空间的容器的大小:
该命令的运行结果为在原有容量的基础之上,每个容器再增加50页。
[color=darkred][i][color=darkred][i]alter tablespace tbs extend (file '/db2data/tbs_01' 50, file '/db2data/tbs_02' 50, file '/db2data/tbs_03' 50) db2 => alter tablespace tbs extend (file '/db2data/tbs_01' 50, file '/db2data/tbs_02' 50, file '/db2data/tbs_03' 50)
DB20000I The SQL command completed successfully.
[color=magenta][db2inst2@ibmdb2 db2data]$ ls -lsk
total 7228
16 drwxrwxr-x 2 db2inst2 db2grp2 16 Aug 29 14:02 lost+found
2404 -rw------- 1 db2inst2 db2grp2 2400 Oct 19 04:50 tbs_01
2404 -rw------- 1 db2inst2 db2grp2 2400 Oct 19 04:50 tbs_02
2404 -rw------- 1 db2inst2 db2grp2 2400 Oct 19 04:50 tbs_03
[/color]----例七:删除例三中创建的DMS表空间:
运行的结果为在DB2的注册表中把TBS表空间删除,同时在磁盘上把相对应的文件夹和文件都一起自动删除。
[color=darkred][i][color=darkred][i][color=darkred][i]drop tablespace tbsdb2 => drop tablespace tbs
DB20000I The SQL command completed successfully.
[db2inst2@ibmdb2 db2data]$ ls -ls
total 16
16 drwxrwxr-x 2 db2inst2 db2grp2 16384 Aug 29 14:02 lost+found
[db2inst2@ibmdb2 db2data]$ pwd
/db2data
-----例八:在UNIX上创建一个DMS表空间,使用500页的1个逻辑卷:
[i]chown db2inst2:db2grp2 /dev/sde1
create tablespace tbs managed by database using (device '/dev/sde1' 500)
db2 => create tablespace tbs managed by database using (device '/dev/sde1' 500)
DB20000I The SQL command completed successfully. 上面语句中提到的UNIX设备必须已经存在,且实例拥有者和SYSADM组必须能够写入它们。
特性 SMS DMS
能够在表空间中动态增加容器的数目吗 N Y
能够把索引数据存放到不同表空间的表中吗 N Y
能够把大对象数据存放到不同表空间的表中吗 N Y
表可以分散存放到多个表空间中吗 N Y
仅在需要时才分配空间吗 Y N
表空间可以被放在不同的磁盘中吗 Y N
创建之后,区段大小能够改变吗 N N
---例九:创建系统临时表空间:系统临时表只能存储在系统临时表空间中,所以数据库必须始终至少有一个系统临时表空间。
[color=darkred][i]create system temporary tablespace temp managed by system using ('/db2data/temp')
db2 => create system temporary tablespace temp managed by system using ('/db2data/temp')
DB20000I The SQL command completed successfully.
----例十:创建用户临时表空间:用户临时表空间用于存储已说明的临时表(用 DECLARE GLOBAL TEMPORARY TABLE 语句定义)
[color=darkred][i]create user temporary tablespace usertemp managed by database using (file '/db2data/usertemp' 500)
db2 => create user temporary tablespace usertemp managed by database using (file '/db2data/usertemp' 500)
DB20000I The SQL command completed successfully.
----例十一:用RENAME语句给表空间重命名:
用该语句给表空间重命名之后,将自动更改所有引用该表空间的目录记录,所以无须关心该表空间中的个别对象
[color=darkred][i]rename tablespace tbs to tbs1
db2 => rename tablespace tbs to tbs1
DB20000I The SQL command completed successfully.
[color=darkred][i][color=cyan][color=darkorange]-----在此处,如果重命名temp表空间,应该咋弄呢?
rename tablespace usertemp to user_temp
db2 => rename tablespace usertemp to user_temp
DB20000I The SQL command completed successfully.
rename tablespace temp to sys_temp ---好像如果是系统临时表空间,刚这样操作报错,大家看看应该如何操作?
db2 => rename tablespace temp to sys_temp
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0707N The name "SYS_TEMP" cannot be used because the specified identifier
is reserved for system use. SQLSTATE=42939----例十二:在RESOURCE表空间中创建一张名为T1的表:
[color=darkred][i]CREATE TABLE T1(ABC INT) IN tbs1
[color=magenta]db2 => CREATE TABLE T1(ABC INT) IN tbs1
DB20000I The SQL command completed successfully.
[color=darkred]3、自动存储表空间数据库允许使用自动存储时
数据库管理器能够自动分配容器(物理存储地址)
自动调整表空间的大小
对普通/大型表空间来使用数据库管理
对用户或系统临时表空间使用系统管理
[color=darkred][i][color=magenta]CREATE DATABASE mydb AUTOMATIC STORAGE YES
CONNECT TO mydb
CREATE TABLESPACE tbsp1 MANAGED BY AUTOMATIC STORA