DTS发生主键冲突一般有如下场景:
1、重启了DTS任务:DTS可能会根据保存的同步位点回拉一部分数据,导致有重复的数据写入目标库,造成主键冲突,此类主键冲突无需过多关注,DTS会自动处理该异常,并保证数据的最终一致性。
2、增量追全量的时间段:因为DTS启动增量早于全量启动,所以全量迁移过程中的变更可能已经随着全量迁移到目标库,而在全量迁移结束后,增量会从全量开始前的时间点回放源库变更,可能会有重复数据写入,此类主键冲突无需过多关注,DTS会自动处理该异常,并保证数据的最终一致性,建议用户在全量迁移过程中尽量避免批量执行DML的行为。
3、目标库存在trigger:目标库有trigger可能会在DTS写入目标库时触发,导致主键冲突,此类问题DTS无法自动恢复,需要用户查看目标库的trigger,并删除之。
4、双向同步任务存在业务双写的情况:双向同步任务用户可配置数据冲突策略,当用户配置的冲突策略为interrupt时并且业务存在双写的情况,DTS链路就会有主键冲突异常,请客户检查报错中的表和主键信息,检查业务是否存在相同主键的DML操作。