首页 > 解决方案 > IBM CDC Replication 获取 SQL 错误代码 1172,SQL 状态 42000

问题描述

我正在使用 IBM CDC Replication 将数据从 AS400 复制到 MySQL。

来源:AS400 (CDC Engine for DB2 for i)==> 目标:MySQL (CDC Engine for FlexRep)

然后,我使用下表映射创建了一个订阅作为镜像复制:

source.item==>target.item

显然,source.item来自 AS400,target.item来自 MySQL。 target.item对 具有唯一键COL1约束COL8

当我运行此订阅时,我收到以下错误:

Failed to add a row to table target.item. COL1: [IT] COL2: [2] COL3: [T999] COL4: [H203  ] COL5: [ ] COL6: [20180831] COL7: [9999999] COL8: [FPL].
Database operation failed.
A SQL exception has occured. The SQL error code is '1172'. The SQL state is: 42000. The error message is:
Result consisted of more than one row.

起初我想知道源表中是否有重复记录 COL1='IT' COL2='2' COL3='999' COL4='H203 ' COL5=' ' COL6='20180831' COL7='999999' COL8= 'FPL',因为复制重复的键值记录会违反目标中的唯一键约束,但是源表中只有一条具有此类键值的记录。

还要提一提的是,我们在表映射中有一个派生列表达式:

NEW_COL ==> %GETCOL(COL_WANTED, "source.lookup", "NOT FOUND", DESCRPF, 5, COL1, COL2, COL3, COL4, COL5)

基本上,我们正在尝试COL_WANTEDsource.lookup匹配值为 COL1to的列中查找COL5。我认为这种“加入/查找”操作可能会产生导致错误的多个结果记录。但是后来我去掉了这个派生列表达式,仍然提示同样的错误。

任何建议将不胜感激。提前致谢。

标签: mysqlibm-midrangedb2-400ibm-data-replication

解决方案


推荐阅读