前言

在传统的数据迁移流程中,数据完成迁移后,往往缺乏快速、直接的数据一致性校验机制,也无法直观地向用户展示校验结果。数据一致性验证通常需要依赖外部工具(如SQL客户端、第三方校验软件)或手动编写脚本实现,主要存在以下主要痛点:

  • 校验流程与迁移流程相互脱节,容易导致信息出现偏差;
  • 校验结果依赖人工汇总与分析,定位异常数据效率较低。

此次羲和(Halo)数据库迁移工具的升级,核心目标即为解决上述难题。新版工具无缝整合了Oracle、MySQL、PostgreSQL等国外主流数据库到Halo数据库的数据迁移与校验,形成一体化流程。其在提升效率、降低门槛的同时,也彻底打消了用户对迁移后数据不一致的担忧。

功能使用流程

前提条件:

        工具已获得读取权限,已完成数据迁移任务。

        源数据库、目标数据库处于正常的运行状态。

校验配置说明:

        在开始数据校验前,需要在管理模块的【校验配置】页面完成预校验配置。这里举例一个常用的重要参数“ batch-compare-size”,它用于设定抽样比对的批次大小。该参数默认为 “2000”,意味着校验时将从每张表中抽取 2000 条数据生成哈希值,并进行一致性比对。

具体操作步骤:

配置校验任务时,建议按顺序完成以下选择:

        填写校验任务名称 → 选择源端数据源 → 选择源Schema → 选择需要校验的表 → 选择目标端数据源 → 选择目标Schema。

说明:支持按“百分比”随机抽样校验,或手动指定具体表进行校验(二者选一)。若Schema内表数量过多,建议采用百分比校验以提升效率。

        点击确认,弹出运行日志的抽屉框,开始进行数据校验任务。

        点击详情按钮可以查看校验任务中所有表的校验结果与校验状态。点击查询日志按钮可以复查运行时的日志。

        点击差异详情按钮,弹出差异分析抽屉框,可以查看具体的差异数据。

        此界面会集中展示所有差异记录。“check 对比总数” 明确为该表数据校验时,基于主键抽取的数据对比总数;校验规则上,若源端缺失而目标端存在,将显示“MissingSource,若目标端缺失而源端存在,则显示“MissingTarget”;对于主键相同但字段值不同的记录,界面将并排显示源端和目标端双方差异的数据,并分别以“source”和“target”作为前缀标识,让各类数据差异一目了然。

功能价值

  • 实现“迁移 + 校验”一体化:迁移工具中增加数据校验功能,无需切换工具和编写脚本,即可完成数据迁移后的一致性核对。
  • 自动化适配异构场景:内置主流数据库映射规则,自动识别源/目标库数据类型,生成适配的校验逻辑。
  • 简化操作与结果分析:提供可视化的校验配置界面和数据界面,将校验差异详情数据直观的展示给用户,方便快速定位与对比。

附录:

对比校验配置参数:

编号 配置参数 解释 默认值 说明
1

project

项目ID 1 项目标识
2

batch-fetch-size

数据库每次查询时批量获取的行数

2000

平衡内存占用与查询效率:一次取太多占内存,太少则频繁查库,默认 2000 是通用最优值

3

batch-commit-size

向仓库插入数据时(插入日志表)单次提交的行数大小

2000

控制事务粒度:批量提交减少数据库事务次数,提升写入效率

4

batch-progress-report-size

每处理多少行数据,工具打印一次进度日志

1000000

用于监控大表对比进度,避免长时间无反馈(如处理 1000 万行会打印 10 次进度)

5

database-sort

是否在源 / 目标数据库预排序数据(查询时自动加 ORDER BY)

true

排序后数据对比更精准(避免行顺序不一致导致的误判),但会增加数据库查询耗时(大表需谨慎)

6

loader-threads

数据加载的线程数量(0 表示禁用多线程)

0

多线程提升加载速度(如 2 线程并行处理数据),需根据服务器 CPU 核心数调整(避免过载)

7

log-destination

日志输出位置

stdout

可选值:
- stdout:打印到控制台;
- 绝对路径:写入日志文件;

8

log-level

日志级别(控制日志详细程度)

config

可选值(从低->高):

config(配置);

info(正常进度);

warning(警告);

severe(仅错误);

9

message-queue-size

加载线程的消息队列容量(队列中可缓存的任务数)

100

缓冲线程任务:避免线程空闲或任务堆积,队列满时会阻塞任务生成,默认 100 适配 2 线程

10

number-cast

数字转字符串的格式方式

notation

(DB2/MSSQL)可选值:
- notation:带格式(如千分位分隔,1000→"1,000");
- standard:标准无格式(1000→"1000")

11

observer-throttle

是否开启 “观察者阈值控制”(达到阈值时暂停加载)

true

防止数据加载过快导致仓库(repository)压力过大,开启后需配合observer-throttle-size使用

12

observer-throttle-size

触发 “暂停加载” 的阈值行数(累计加载多少行后暂停)

2000000

暂停后需等待 “观察者进程”(清理临时表、释放资源)完成后,才继续加载

13

observer-vacuum

观察者进程是否对仓库的临时表执行 VACUUM(Postgres 清理命令)

true

Postgres 专属:清理临时表的无效数据、释放磁盘空间,避免仓库表膨胀

14

stage-table-parallel

并行度

0

临时表的并行度

15

standard-number-format

数字格式

000000000000

0000000000.0

00000000000

0000000000

DB2专属,当使用number-cast配置时,将数字格式切换为标准格式,并将数字格式设置为精度为 31 的标准数字格式,以符合 DB2 的要求。

16

batch-compare-size

单表一次性进行Hash校验对比行数

2000

避免一张表对比的时候生成hash校验行数数据量太大

17

batch-check-size

单表一次性进行check对比行数

1000

避免一张表对比的时候check行数数据量太大(小于等于batch-compare-size)

18

batch-offset-size

单表进行分页查询

0

可以选择从第几条数据后开始进行抽取对比,默认为0从第一条数据开始抽取

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐