DB2表空间要点

–建立DMS表空间
C:\Users\Administrator>db2 “create large tablespace tbs_data pagesize 32K managed by database using (file ‘C:\sss_tbs_a’ 100M,file ‘C:\sss_tbs_b’ 100M) extentsize 32 prefetchsize automatic bufferpool bp32k no file system caching”
这个会的在C:\盘上立刻创建两个文件,分别为sss_tbs_a,sss_tbs_b。大小各位100M

–创建SMS表空间(这里以临时表空间为例)
–临时表空间使用时候是系统随机选择的,一般不建议建立多个,只要pagesize符合用户需求即可。同时临时表空间一般建议用SMS。临时表空间的页大小不一定要和数据表空间的页大小一致,但是需要保证在排序之类操作的时候,临时表空间的page大小足够容纳排序行的大小。
C:\Users\Administrator>db2 “create temporary tablespace tbs_temp pagesize 32k managed by system using (‘C:\tbs_temp’) bufferpool bp32k”
这个会的在C:\盘上立即创建一个文件夹tbs_temp

–创建一个AUTO-DMS
C:\Users\Administrator>db2 “create tablespace tbs_index pagesize 32k bufferpoolbp32k”
这个会在默认的存储组上建立一个新的T0000X的东西,然后里边有个表空间文件。

–表空间大小的修改
1.SMS表空间
对于SMS表空间,不支持表空间容器的修改,只能修改容器的文件系统的大小。

2.DMS表空间
一般建议开启auto-resize。在开启auto-resize的情况下,还是可以手工的去修改大小的。

add:增加容器(会重平衡)
drop:删除容器(会重平衡)
extend:扩展容器大小
reduce:缩减容器大小
resize:重新设定大小

通过extend:
C:\Users\Administrator>db2 “alter tablespace tbs_data extend(file ‘C:\sss_tbs_a’ 100M)”
DB20000I SQL 命令成功完成。
C:\Users\Administrator>db2 “alter tablespace tbs_data extend(file ‘C:\sss_tbs_b’ 100M)”
DB20000I SQL 命令成功完成。
C:\Users\Administrator>db2 “alter tablespace tbs_data extend(all 100M)”
DB20000I SQL 命令成功完成。

通过add(会重平衡):
C:\Users\Administrator>db2 “alter tablespace tbs_data add(file ‘C:\sss_tbs_c’ 100M)”
DB20000I SQL 命令成功完成。

通过增加新条带:
C:\Users\Administrator>db2 “alter tablespace tbs_data begin new stripe set (file ‘C:\sss_tbs_d_2’ 100M)”
DB20000I SQL 命令成功完成。

3.AUTO-DMS表空间
只可以对容器组进行容器的增加。且增加了以后如果不主动rebalance,那么不会自动的去使用。对于这类表空间,是不能直接去修改表空间大小的,如:
[db2inst1@HADR01 ~]$ db2 “alter tablespace fff extend(all 3M)”
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL20318N Table space “FFF” of type “AUTOMATIC STORAGE” cannot be altered
using the “EXTEND” operation. SQLSTATE=42858
所以建议把auto-resize打开,可以是:
[db2inst1@HADR01 ~]$ db2 “alter tablespace fff autoresize yes”

对于这类表空间,可以用如下方法添加容器(不会立即重平衡,会产生新的条带集),这个玩意在10.1之后的话是用在默认的stogroup(如果没重新指定,那么就是IBMSTOGROUP。不过10.1之后建议用下面的alter stogroup啦)上的:
alter database add storage on ‘/path1′,’/path2′,’/path3’
在10.1之后,由于可以存在多个存储组,所以可以用下面的这个:
alter stogroup XXX add ‘/XXX’

storage group路径可以用这个看到:
[db2inst1@HADR01 ~]$ db2pd -storagepaths -db test

如:
C:\Users\Administrator>db2 alter database add storage on ‘C:\aaa’
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL1051N 路径 “C:\aaa” 不存在或无效。 SQLSTATE=57019
–这里我去建立了一个aaa目录
C:\Users\Administrator>db2 alter database add storage on ‘C:\aaa’
DB20000I SQL 命令成功完成。

C:\Users\Administrator>db2pd -db sss -storagepaths

Database Partition 0 — Database SSS — Active — Up 0 days 00:01:15 — Date 2013-10-07 23:08:59

Database Storage Paths:
Number of Storage Paths 2

Address PathID PathState PathName
0x000007FFFCC19380 0 InUse C:
0x000007FFE624B320 1 NotInUse C:\aaa

–表空间异常状态
如果都无法连接数据库了,尝试:
先db2 list db directory,看下数据库目录。然后cat SQLSPCS.1这个文件,看下有哪些表空间。

如果可以连上数据库,那就最好啦~

一般如果恢复的时候表空间所在容器不存在,那么基本上会有问题。所以恢复的时候要确保容器都在。

如果有人不小心修改了表空间容器的目录名,那么表空间很有可能有问题,并提示offline状态啥的。这个时候呢不要急,把容器名改回来,然后db2 alter tablespace XXX switch online看看。

如果是临时表空间没了,删了重建一个,确保pagesize符合要求就好。

–建立临时表空间(注意,如果是自动存储,那么会的自动建成SMS的表空间)。临时表空间的页大小不一定要和数据表空间的页大小一致,但是需要保证在排序之类操作的时候,临时表空间的page大小足够容纳排序行的大小。
db2 create system temporary tablespace ITMSYS32K pagesize 32 K bufferpool ITMREGBUF32K
db2 create user temporary tablespace ITMUSER8K pagesize 32 K bufferpool ITMREGBUF32K

–降低高水位
DMS和AUTO DMS不一样。

运行“db2 LIST TABLESPACES SHOW DETAIL”命令可以得到数据库中所有表空间的详细信息。看看已使用页(Used pages)和高水位标记(High water mark)的数值。如果相等,则说明高水位标记下没有空闲页可以被释放。如果高水位标记大于已使用页,则说明高水位标记下存在空闲页,而且也可以算出来。
或下面的SQL,看下TBSP_PAGE_TOP是否大于TBSP_USED_PAGES:
db2 “SELECT varchar(tbsp_name, 16) as tbsp_name,RECLAIMABLE_SPACE_ENABLED,TBSP_USED_PAGES,TBSP_FREE_PAGES, TBSP_PAGE_TOP from TABLE (MON_GET_TABLESPACE(”,-2)) AS t”

降低的时候通过下面的命令监控:
[rptusr@imccnsutdw001 ~]$ db2 “SELECT varchar(tbsp_name, 20) as tbsp_name, NUM_EXTENTS_MOVED,NUM_EXTENTS_LEFT, TOTAL_MOVE_TIME from TABLE(MON_GET_EXTENT_MOVEMENT_STATUS(‘RPTREG32K’,-2)) AS t”

对于DMS,需要先降低高水位标记,然后缩减容器文件大小:
db2 ALTER TABLESPACE RPTREG32K LOWER HIGH WATER MARK
db2 ALTER TABLESPACE RPTREG32K REDUCE (ALL CONTAINERS 10 G)

对于AUTO DMS,直接缩减容器文件大小即可:
db2 ALTER TABLESPACE RPTREG32K REDUCE MAX

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*