You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymmetricDS同步异常:Agency→HQ路由出现外键缺失报错

关于SymmetricDS Agency→HQ同步外键报错的排查与解决

问题概述

现有HQ(节点1)和Agency(节点2)两个节点,仅Agency→HQ方向同步出现异常,HQ→Agency方向正常。
初始两数据库完全一致(镜像、外键约束、数据均匹配),双向同步稳定运行数月。客户执行网络中断测试(数据库写入期间拔网线)后,恢复连接出现问题:Agency可成功推送数据至HQ,但HQ因外键约束无法完成行的新增/更新。已确认HQ数据库中存在报错提示的外键对应记录7090efee-379d-44f7-bb58-4ca4e596c62f,且外键约束本身正常。该问题仅出现在预生产环境,开发环境无异常。

报错信息

[sede-000] [DefaultDatabaseWriterConflictResolver] [sede-000-dataloader-1665] Detected losing row for batch preagencia002-680 for missing foreign key parent agencias:7090efee-379d-44f7-bb58-4ca4e596c62f

注:事务中存在部分行丢失,但批次数据写入SymmetricDS批次表时无报错。

排查方向

  • 检查批次执行顺序:网络中断可能导致批次乱序,子表数据先于父表数据到达HQ。即使父表最终存在,同步时父表数据未完成写入就处理子表,会触发外键报错。查看sym_batch表中批次的create_time和status,确认preagencia002-680批次前后,包含父表agencias:7090efee-379d-44f7-bb58-4ca4e596c62f数据的批次是否正常执行。
  • 验证数据加载器事务隔离级别:HQ节点的数据加载器可能因隔离级别过高,读取父表数据时未看到已提交的记录,导致误判外键不存在。检查节点配置中的db.read.isolation.level参数。
  • 查看日志细节:在HQ节点开启DEBUG级日志,重点查看DefaultDatabaseWriterConflictResolver相关输出,确认检测外键时的查询语句和返回结果,排查是否存在查询条件错误或索引失效。
  • 检查数据库索引与缓存:HQ数据库的外键字段索引可能因网络中断出现异常,导致查询父表记录时无法命中。手动执行报错涉及的外键查询语句,确认是否能快速返回结果。

解决办法

  • 重排异常批次:确认批次乱序后,暂停Agency→HQ的同步路由,找到包含父表目标记录的批次,先手动执行该批次,再执行报错的preagencia002-680批次,最后恢复同步。
  • 调整事务隔离级别:将HQ节点的db.read.isolation.level设置为READ_COMMITTED,确保数据加载器能读取到已提交的父表记录。
  • 重建数据库索引:针对agencias表的主键字段重建索引,消除索引异常导致的查询问题。
  • 重置节点同步状态:若上述方法无效,可在HQ节点删除sym_batch、sym_data中与异常批次相关的记录,然后重新初始化Agency节点的同步操作(操作前务必备份数据)。

强制处理方案

如果已确认父表记录确实存在,可采用以下临时方案跳过报错:

  • 修改冲突 resolver配置:在HQ节点的sym_conflict表中,针对报错涉及的子表,将conflict_resolver_type设置为ignore;或修改DefaultDatabaseWriterConflictResolver的配置参数foreign.key.check.enabled为false,执行完异常批次后恢复原配置。
  • 手动执行批次SQL:从sym_data表中提取preagencia002-680批次对应的SQL语句,直接在HQ数据库执行,之后更新sym_batch表中该批次的status为OK,标记为已完成。

内容的提问来源于stack exchange,提问作者RedNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:01:16