大表拆分方案
1、变更前提描述
当前大表,未作拆分,查询效率和维护难度较大,对此需要调整为分区表,均按照木木字段已月为单位分拆
变更前注意表空间文件系统使用情况,确保空间足够
2、变更方案
A停止相关业务对该表的访问,并导出ddl语句
db2look -d dbname -t s.t -e -o t.ddl
B重命名表,后缀为bak-date
db2 “rename table s.t to s.t_bak20210101”
C新建表,并重新导出表结构核对字段、索引
db2 -tvf t_new.ddl
db2look -d dbname -t s.t -e -o
D定义查询原表的游标,然后load到对应的新表中
db2 " declare c1 for select * from s.t_bak20210101"
db2 “load from cl of cursor insert into s.t”
db2 “select count(1) from s.t”
E对新表收集统计信息更新
db2 “runstats on table s.t and sampled detailed indexes all”
进行业务验证
F系统运行正常一段时间,之后删除原表
db2 “drop table s.t_bak20210101”
G降低对应表空间高水位
db2 “alter tablespace xxxx reduce max”
3、风险以及回退
操作风险较低,提前在测试换件验证上诉拆分步骤,生产load导入时注意确保无数据拒绝
回退分步骤
当新表使用异常时候,可以直接drop新表,然后重命名旧表
db2 “rename table s.t_bak20210101 to s.t”
建表语句说明
在导出ddl中增加 “partition by rang(xxx) (starting (‘1/1/2018’) ending(‘12/31/2049’) every 1 month)”
语句按照月份区分,根据时间调整,但必须确保涵盖当前以及未来的所有可能的数据范围。
并修改索引名称,增加_new后缀。
查询当前数据时间范围参考
db2 “select min(xxx) from s.t with ur”
db2 “select max(xxx) from s.t with ur”




