我正在使用 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_WANTED
从source.lookup
匹配值为 COL1
to的列中查找COL5
。我认为这种“加入/查找”操作可能会产生导致错误的多个结果记录。但是后来我去掉了这个派生列表达式,仍然提示同样的错误。
任何建议将不胜感激。提前致谢。