复制包含可空主键列的表行会失败

当某些 Db2 版本被用作 Data Gate 复制的目标,且用户复制了具有可为空主键列的表的行时,复制引擎可能会失败。

故障现象

事件消息(若启用加速则为DSNX消息)的发生,其内容如下:
/E2030/ 并行应用期间的SQL异常: DB2 SQL错误: SQLCODE=-901 , SQLSTATE=58004 , 
SQLERRMC=在 JoinRewriter.cpp:1529 处发生意外错误, DRIVER=4.34.30

原因

复制引擎将陷入重启循环,要么被挂起(重启时间更长),要么持续重启。

解决问题

要修复此问题:
  1. 登录到 Data Gate pod。
  2. 进入 datagate-apply 容器。
  3. 导航至以下位置的复制跟踪文件:
    /head/dwa/iu/instances/<yourinstance>/log and check for above message
  4. 如果存在事件消息,则需要为 db2 wh 实例设置优化器属性:
    db2set -im DB2_OPTIMIZER_MODIFIERS="COL_NEQN_SCOPE_CHECK OFF"
    然后清除动态包缓存:
    
    db2 connect to db; db2 flush package cache dynamic