DROP or SELECT on a detached data partition from a partitioned table throws SQL20285N with Reason code 2解决方法
在db2中使用分区表的在线转出(DETACH PARTITION),V9.7比V9.5跨越比较大。V9.7使用异步方式,虽然已经执行了“ALTER TABLE ... DETACH PARTITION ...”,但当分离还没有进行完毕时,对分离出的表进行drop或select,就会抛错“DROP or SELECT on a detached data partition from a partitioned table throws SQL20285N with Reason code 2”,这时查看SYSCAT.DATAPARTITIONS 目录视图会发现你所分离的分区还在这里面。只有当异步分离完成后,才能进行drop或select,并且查看SYSCAT.DATAPARTITIONS 目录视图,进行分离的分区已不存在。
若在存储过程中同时对表分区DETACH,并对分离出的表进行drop或select。该存储过程在V9.5中可用,在V9.7中不可用。为兼容V9.7可加入以下代码逻辑临时解决
SET DETACH_DONE=0;
WHILE DETACH_DONE = 0 DO
SET DETACH_DONE=1;
FOR CURSOR_DETACH AS CURSOR_DETACH CURSOR WITH HOLD FOR SELECT DATAPARTITIONID FROM SYSCAT.DATAPARTITIONS
WHERE TABSCHEMA = '架构名'
AND TABNAME = '分区表名' AND DATAPARTITIONID=分区ID WITH CS
DO
SET DETACH_DONE=0;
END FOR;
END WHILE;
上面逻辑就是循环访问SYSCAT.DATAPARTITIONS 目录视图,当发现目标分区不存在后退出,说明异步分区工作完成。该代码也有使用风险,由于是不停的循环,会对CPU的使用瞬间上升。该逻辑为临时处理方法,不是最佳方案。
分区表的DETACH工作流程可参见
http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1110tablepartinfosphwhs/?cmp=dwnpr&cpb=dw&ct=dwcon&cr=cn_CSDN_dl&ccy=cn
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26345550/viewspace-759490/
,如需转载,请注明出处,否则将追究法律责任。