# 数据校验

UDTS为数据传输任务提供数据校验功能，用于校验源库和目标库的数据一致性。支持行数校验与完整数据校验两种模式。

## 支持数据类型

| 数据源  | 数据目标 | 行数校验 | 完整数据校验 |
| ------- | -------- | -------- | ------------ |
| MySQL   | MySQL    | 支持     | 支持         |
| MySQL   | TiDB     | 支持     | 支持         |
| TiDB    | MySQL    | 支持     | 支持         |
| TiDB    | TiDB     | 支持     | 支持         |
| MongoDB | MongoDB  | 支持     | 支持         |

## 前提条件
启动数据校验任务需满足以下条件：
1. 全量任务需运行到“完成”状态
2. 增量/全+增任务需运行到“同步中”/“已同步”状态，运行中的任务可以直接启动数据校验，也可以停止任务后再进行校验
3. 任务状态为失败时不支持数据校验
4. 如果当前任务有运行中的数据校验任务，不支持重复启动数据校验

## 校验内容
数据校验功能仅支持校验通过UDTS任务迁移的库表，不支持校验未迁移库表。
1. 行数校验：仅对比源库和目标库中每张表的行数，不比较具体数据内容。
2. 完整数据校验：对比源库和目标库中具体的数据内容。
   - MySQL数据校验时，校验源库和目标库中所有数据，只在源库中存在的数据和只在目标库中存在的数据都会被标记为不一致。
   - MongoDB数据校验时，以源库为准，只校验源库中的数据在目标库是否一致。


## 使用方法
1. 全量任务可以在创建任务时选择“全量完成时进行数据校验”，可选择两种迁移模式，全量任务完成后会自动启动数据校验任务。
<!-- image-todo -->
2. 满足启动条件的任务均可在任务列表页或任务详情页点击按钮启动数据校验任务。
<!-- image-todo -->
<!-- image-todo -->
3. 数据校验的详细信息可在 任务详情页 -> 数据校验页面 查看。
<!-- image-todo -->

## 注意事项
1. MySQL 完整数据校验需要库表中存在主键或唯一索引。无唯一索引的表只校验行数，不校验具体数据内容。
2. 数据校验任务会占用源库和目标库的读资源，可能导致数据库负载上升。建议在业务低峰期执行数据校验任务。
3. 如果在源库有持续数据写入的情况下开启数据校验，最近写入数据的校验结果可能不准确，建议在源库停写的情况下执行数据校验任务。
4. 数据不一致时，前端页面最多展示前10条差异数据，详情请下载完整数据校验报告。报告文件保留3天，请及时下载。
5. 完整数据校验中，如果某张表的不一致数据超过10000行，则停止对这张表的校验。请在修复数据后重新校验。