数据校验问题

更新时间:
复制 MD 格式

  • Q:数据校验任务出现数据不一致的原因有什么?

    常见原因如下:

    1. 迁移或同步任务有延迟。

    2. 源库执行有默认值的加列操作,且任务有延迟。

    3. 目标库有除DTS以外的数据写入。

    4. 开启了多表归并功能的任务源库执行了DDL操作。

    5. 迁移或同步任务使用了库表列名映射功能。

  • Q:为什么结构校验任务会校验出isRelHasoids有差异?

    PostgreSQL 12以下版本的PostgreSQL数据库,支持在创建表时通过指定WITH OIDS的方式,添加一个全局唯一的对象标识符(OID)字段。若结构校验任务的源端在创建表时指定了WITH OIDS,目标端为不支持指定WITH OIDS的高版本PostgreSQL数据库,则会被校验出isRelHasoids差异。

  • Q:结构校验任务校验出isRelHasoids有差异是否需要关注?

    不需要。

  • Q:DTS是否会同步或迁移对象标识符(OID)字段?

    对象标识符(OID)字段是通过指定WITH OIDS而自动生成的,无论目标端是否支持该字段,DTS均不会同步或迁移该数据。

  • Q:如何检查表是否存在了对象标识符(OID)字段?

    命令:SELECT relname AS table_name, relhasoids AS has_oids FROM pg_class WHERE relname = '' AND relkind = 'r';客户端命令:\d+ " props="china" is-conref="true" data-cond-props="china" class="section">
    说明

    命令中的<table_name>需替换为待查询的表名。

    • SQL命令:SELECT relname AS table_name, relhasoids AS has_oids FROM pg_class WHERE relname = '<table_name>' AND relkind = 'r';

    • 客户端命令:\d+ <table_name>

  • Q:全量校验报告显示数据不一致时如何排查?

    可按以下步骤逐项排查:

    1. 查看校验报告中列名对应的源库和目标值,确认具体不一致的字段和数值。

    2. 根据校验报告手动登录源库和目标库,对比差异值是否符合预期。

    3. 确认源端和目标端在校验期间无数据写入。若无法保证,建议在业务低峰期暂停源库写入后重新发起校验。

    4. 若差异持续存在,可在源端和目标端临时开启SQL洞察(按量付费),通过审计日志排查对应字段是否有修改。

    5. 部分属性(如SECURITY_TYPE)的差异属于预期行为,可不作处理。

    6. 全量校验通过可证明后端非标修改后的数据一致性。

    7. 全量校验不一致通常与结构差异无关,建议手动执行count(*)对比源库和目标库的记录数进行进一步验证。

  • Q:为什么 DTS 数据传输已完成但进度仍显示未完成(如 41%)?

    DTS 的任务进度百分比包含数据传输(全量迁移)和数据校验两个阶段。全量迁移完成后,剩余的进度百分比代表正在进行的数据校验过程。数据校验是在全量传输完成后独立执行的一致性检查阶段,校验进度达到 100% 后整体任务才算完成。

    若需要在传输完成后立即确认数据情况,可手动连接目标端数据库检查数据,而无需等待校验进度完成。

  • Q:全量校验阶段 SQL 查询执行缓慢的原因及处理方法

    原因:DTS 在全量校验阶段通过主键 ID 对大表进行分片读取,数据量较大时分片查询耗时较长,可能导致源端出现慢 SQL 查询。

    处理方法:

    1. 首先确认全量校验任务是否已停止。若校验任务已停止,则不应再有此类查询产生。

    2. 若校验任务仍在运行且对业务有影响,建议在业务低峰期执行全量校验,或暂停校验任务,待业务低峰期再重新发起。