db2 "create table pt1(id int not null primary key generated by default as identity (start with 1 increment by 1 no cache no maxvalue), name char(10)) partition by range(id) (starting from (1) ending at (1001) exclusive every (100))"
ALTER TABLE "DB2INST1"."PT1" ALTER COLUMN "ID" RESTART WITH 1
unset i
i=1
while ((i<1000))
do
db2 "insert into pt1(name) values(trim(char(int(rand()*1000)))||'abc')"
i=$((i+1))
done
db2look -d sample -e -t pt1
db2 alter table pt1 detach partition part0 into table part0
db2 alter table pt1 detach partition part1 into table part1
结论:删除分区表的分区并没有使CDC预定状态报错。***
下面测试添加分区的操作:
db2 "
SELECT
DATAPARTITIONID, DATAPARTITIONNAME,
LOWINCLUSIVE, LOWVALUE, HIGHINCLUSIVE,
HIGHVALUE
FROM SYSCAT.DATAPARTITIONS
WHERE TABSCHEMA='DB2INST1'
AND TABNAME='PT1'
ORDER BY SEQNO
"
测试结论:
单纯的增加分区或者删除分区并不会使CDC预定失败。
测试修改表字段类型:
db2 "alter table pt1 alter column name set data type char(20)"
db2 reorg table pt1
CDC预定立即报错,错误信息如下:
####
IBM InfoSphere Change Data Capture 遇到针对源表 DB2INST1.PT1 的关键数据定义 (DDL) 更改,并将关闭。为了恢复对该表的复制,必须在重新启动该预订之前执行以下操作。
1) 更新源表定义并验证生成的表映射是否正确。
2) 通过产品(刷新标志)来刷新该表或将该表设置为活动(标记镜像操作的表捕获点)并手工确保目标表同步,来提供新的复制同步点。
####
出现这种情况,需要先更新表定义,然后标记捕获点重新使预定制作镜像。***