Q:数据校验任务出现数据不一致的原因有什么?
常见原因如下:
迁移或同步任务有延迟。
源库执行有默认值的加列操作,且任务有延迟。
目标库有除DTS以外的数据写入。
开启了多表归并功能的任务源库执行了DDL操作。
迁移或同步任务使用了库表列名映射功能。
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:全量校验报告显示数据不一致时如何排查?
可按以下步骤逐项排查:
查看校验报告中列名对应的源库和目标值,确认具体不一致的字段和数值。
根据校验报告手动登录源库和目标库,对比差异值是否符合预期。
确认源端和目标端在校验期间无数据写入。若无法保证,建议在业务低峰期暂停源库写入后重新发起校验。
若差异持续存在,可在源端和目标端临时开启SQL洞察(按量付费),通过审计日志排查对应字段是否有修改。
部分属性(如
SECURITY_TYPE)的差异属于预期行为,可不作处理。全量校验通过可证明后端非标修改后的数据一致性。
全量校验不一致通常与结构差异无关,建议手动执行
count(*)对比源库和目标库的记录数进行进一步验证。
Q:为什么 DTS 数据传输已完成但进度仍显示未完成(如 41%)?
DTS 的任务进度百分比包含数据传输(全量迁移)和数据校验两个阶段。全量迁移完成后,剩余的进度百分比代表正在进行的数据校验过程。数据校验是在全量传输完成后独立执行的一致性检查阶段,校验进度达到 100% 后整体任务才算完成。
若需要在传输完成后立即确认数据情况,可手动连接目标端数据库检查数据,而无需等待校验进度完成。
Q:全量校验阶段 SQL 查询执行缓慢的原因及处理方法
原因:DTS 在全量校验阶段通过主键 ID 对大表进行分片读取,数据量较大时分片查询耗时较长,可能导致源端出现慢 SQL 查询。
处理方法:
首先确认全量校验任务是否已停止。若校验任务已停止,则不应再有此类查询产生。
若校验任务仍在运行且对业务有影响,建议在业务低峰期执行全量校验,或暂停校验任务,待业务低峰期再重新发起。