联系我们
18591797788
hubin@rlctech.com
北京市海淀区中关村南大街乙12号院天作国际B座1708室
18681942657
lvyuan@rlctech.com
上海市浦东新区商城路660号乐凯大厦26c-1
18049488781
xieyi@rlctech.com
广州市越秀区东风东路华宫大厦808号1608房
029-81109312
service@rlctech.com
西安市高新区天谷七路996号西安国家数字出版基地C座501
数据库同步运维中,DDL 同步异常导致链路中断、数据同步停滞是高频棘手故障。本文分享一则真实生产案例:源端通过 DMS 无锁变更新增字段,前两条字段正常同步,第三条字段缺失引发同步报错阻塞,完整拆解报错现象、底层根因、故障流转逻辑与长效解决方案。

现象:源端执行了 3 个 ADD COLUMN DDL,前两个成功同步到目标端,第三个 r_supplier_info.as_creditor_declaration 未同步,导致链路阻塞。
错误码:CONNECTOR-SIGE00000001
等级:ERROR
错误信息:
Column doesn't exist in target table [XXX]. Possible reasons: 1. Columns have been added to the source, but incremental DDL synchronization is not enabled. 2. Although incremental DDL synchronization is enabled, DDL conversion may have failed. 3. The synchronization schema feature has been enabled, but the specified column does not exist on the target side. Origin error message: handleColumnsOnlyInSource: [asXXX] in [riXX not found in target table [hxx.riXX]
错误原因:Unknown
客户使用 DMS 无锁结构变更工具 执行 ADD COLUMN 操作。该工具为了保证"不锁表",会先将原始 DDL 拆分成两步:
原始 DDL:
ALTER TABLE rXX ADD COLUMN asXX varchar(8) DEFAULT NULL COMMENT 'xxx';
DMS 无锁变更拆分为:
① ALTER TABLE xxx AUTO_INCREMENT = xx; ← 影子表自增值同步
② ALTER TABLE xxx ADD COLUMN xxx varchar(8)...;
| DDL 类型 | OMS 是否支持同步 | 说明 |
|---|---|---|
| ALTER TABLE ... ADD COLUMN ... | 支持 | 标准的 DDL 类型 |
| ALTER TABLE ... AUTO_INCREMENT = xxx | 不支持 | OMS 当前未兼容此场景 |
OMS 的 DDL 解析器不支持解析 ALTER TABLE ... AUTO_INCREMENT = xxx 这类命令(它不会被转换成目标端的 DDL),导致整条链路卡住,影子表上的 ADD COLUMN 也无法同步到真正的目标表。
前两个表(transaction_base_info_ext、transaction_uprimer_vat_payment_extra)没有自增列或者当时无锁工具没有触发 AUTO_INCREMENT 拆分,因此 DDL 是单条发送的,OMS 正常解析同步。
plaintext
DMS 无锁变更提交
│
▼
┌─────────────────────────────────────────────┐
│ 拆分 DDL │
│ │
│ ① AUTO_INCREMENT = xxx (OMS 不识别) │
│ ② ADD COLUMN xxx (正常应该同步) │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ OMS obcdc 增量解析 │
│ │
│ 读到 ① → ❌ 无法解析 → DDL 同步流程中断 │
│ 读到 ② → ⏸️ 被阻断未到达目标端 │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ OMS Writer 写入目标端 │
│ │
│ 目标端 schema 中缺少 as_creditor_declaration │
│ → DML 写入时报 ColumnNotExistException │
│ → 链路卡住 │
└─────────────────────────────────────────────┘
在目标端手动补建缺失列
DMS 无锁变更需要在 OMS 侧额外配置两个参数以支持该场景。

如果业务允许,直接通过 ODC 或 MySQL 客户端执行标准 DDL(不使用 DMS 无锁变更),OMS 可以原生支持并同步。
每次使用 DMS 无锁变更时,确认目标端是否成功同步,如果未同步则手动在目标端执行 ADD COLUMN。
条件 是否触发此问题
表无 AUTO_INCREMENT 列 + 普通 DDL ❌ 不触发
表有 AUTO_INCREMENT 列 + 直接执行 DDL ❌ 不触发
表有 AUTO_INCREMENT 列 + DMS 无锁变更 ✅ 触发
1.直接原因:
DMS 无锁变更将 ADD COLUMN 拆成 AUTO_INCREMENT + ADD COLUMN 两条 DDL,OMS 无法解析 AUTO_INCREMENT 命令
2.Ongoing 限制:
OMS 当前不支持 ALTER TABLE ... AUTO_INCREMENT = xxx 这类 DDL 的解析同步
3.规避措施:
○ OMS 侧配置 DMS 无锁变更兼容参数
○ 或执行 DDL 前确认表结构是否带自增列,带自增列的表谨慎使用 DMS 无锁变更
○ 执行后验证目标端 schema 是否同步成功