数据迁移校验是生产切换前的最终防线,须覆盖结构、数据、逻辑三重一致性,且全过程可重复、可审计、可回溯:结构校验要求DDL语义等价,防范映射偏差;数据校验需分总量、抽样、特征三层,禁用仅比COUNT(*)的粗放方式;逻辑校验须用真实SQL、函数、触发器执行结果说话;校验过程须留痕、分级门禁、支持断点续验。

数据迁移校验不是“做完就完事”的收尾动作,而是生产环境切换前的最终防线。它必须覆盖结构、数据、逻辑三重一致性,且所有验证过程需可重复、可审计、可回溯。
结构一致性校验:DDL 层面零偏差
迁移后目标库的表、索引、约束、视图等对象定义,必须与源库语义等价,而非仅字段名相同。常见陷阱是 Oracle 的 VARCHAR2(100 CHAR) 被简单映射为 KingbaseES 的 VARCHAR(100),导致中文截断;或自增列、序列、默认值表达式未正确转换。
- 使用工具自动比对:运行迁移工具自带的“结构差异扫描”功能(如 KES DTS 的 Schema Compare),导出不一致项清单
- 人工复核关键对象:主键/外键约束是否启用、索引字段顺序与排序方向(ASC/DESC)是否一致、CHECK 约束逻辑是否等效
- 执行 DDL 脚本反向生成:从目标库导出建表语句,与源库原始 DDL 逐行比对(注意字符集、存储参数、注释等隐含差异)
数据一致性校验:行级精度与分布特征双验证
不能只查 COUNT(*) 是否相等——这掩盖了空值错位、类型隐式转换、时区偏移、LOB 截断等深层问题。需分层验证:
- 总量层:统计每张表的行数、非空字段数、NULL 值数量,对比源/目标差异率(建议阈值 ≤ 0.001%)
- 抽样层:对大表按主键范围随机抽取 0.1%~1% 记录,逐字段比对(推荐用 md5(concat(...)) 做行级哈希校验)
- 特征层:校验关键字段的分布特征,如金额字段的 SUM/AVG/MIN/MAX、时间字段的最早/最晚值、枚举字段的值频次分布,确保业务语义未漂移
业务逻辑一致性校验:用真实查询说话
数据库不是静态快照,而是业务逻辑的载体。校验必须穿透到应用层常用 SQL 的执行结果:
- 提取核心业务报表、日结/月结脚本、风控查询等 10~20 条高频 SQL,在源库和目标库分别执行,比对结果集(行数 + 每行内容 + 执行计划关键指标如 rows、cost)
- 验证函数/存储过程行为:如 Oracle 的 TO_DATE('2025-01-01', 'YYYY-MM-DD') 在 KingbaseES 中是否等效;自定义函数返回值、异常处理路径是否一致
- 检查触发器与约束生效状态:例如 NOT NULL 约束是否真正拦截非法插入,外键级联删除是否触发,避免“结构存在但逻辑失效”
校验过程管理:留痕、分级、可中断
生产环境校验不是技术动作,而是受控流程:
- 所有校验操作必须通过专用账号执行,操作日志完整记录时间、SQL、结果摘要、执行人,写入独立审计库
- 设置三级校验门禁:① 自动化脚本初筛(失败即阻断)→ ② DBA 人工复核差异报告 → ③ 业务方确认关键查询结果
- 支持断点续验:校验任务应能按表/按批次保存进度,网络中断或超时后可从中断处继续,避免全量重跑
校验不是越细越好,而是要在风险覆盖与实施成本间取得平衡。重点盯住核心交易表、资金相关字段、权限控制逻辑——这些地方出错,代价远高于多花几小时做一次哈希比对。

















