注册
DMDVS 数据校验实战指南
专栏/技术分享/ 文章详情 /

DMDVS 数据校验实战指南

Cath Palug 2026/08/28 149 0 0
摘要

DMDVS 数据校验实战指南

DMDRS 负责把数据从源端搬到目标端,但搬过去的数据对不对?DMDVS 就是解决这个问题的——它是达梦数据校验软件,专门负责验证数据一致性,相当于数据复制链路中的“质检员”。

DMDVS 支持同构、异构数据库间的数据校验、数据修复、数据备份和数据还原等功能,满足静态数据校验、动态数据校验、单向数据校验和分布式数据校验等多种应用场景。内置自主研发的高性能对比引擎,可实现秒级校验百万数据

本文基于实际部署经验,从零开始带你走完 DMDVS 的完整实践流程,涵盖安装部署、参数优化、校验执行、数据修复和差异定位。

1. 为什么需要 DMDVS?

在数据迁移、数据灾备、实时数据集成等场景中,数据从源端同步到目标端后,如何确认两端数据完全一致

传统的做法是人工写 SQL 对比,面对几百张表、上亿行数据时,这种方法既不现实也不可靠。DMDVS 的出现就是为了解决这个问题:

  • 自动化校验:无需人工逐表对比,一条命令完成全量校验
  • 高性能:智能分组 + 并行查询 + MD5 比对,百万数据秒级完成
  • 精准定位:不仅能告诉你“数据不一致”,还能定位到具体是哪一行、哪一列不一致
  • 自动修复:发现差异后,可以一键将目标端数据修复为与源端一致

在实际项目中,DMDVS 已被广泛应用于金融、电力、政务等关键行业的数据一致性保障场景。

2. DMDVS 架构与校验场景

DMDVS 采用模块化的框架设计,主要包括 Manager 管理模块、CMP 校验模块和 Console 远程控制工具:

  • Manager 管理模块:负责客户端监听、模块加载维护及控制台命令执行
  • CMP 模块:提供数据校验、报告生成、数据修复、备份、还原及进度监控
  • Console 远程控制工具:通过网络远程启动、停止校验任务,监控进度并查看报告

DMDVS 支持四种核心校验模式:

校验模式 适用场景
静态数据校验 源库与目标库处于静止状态(无写入),校验服务器可同时访问两端——数据迁移验证、容灾基线核查
动态数据校验 DMDRS 增量同步过程中实时校验,不影响同步性能
单向数据校验 源端与目标端存在网闸隔离,只能单向通信——涉密网络与互联网区域数据比对
分布式数据校验 PB 级海量数据、资源受限环境、跨地域多数据中心并行校验

本文聚焦最常用的静态数据校验场景:DMDVS 服务器可同时访问源端和目标端数据库,执行一次性全量校验。

3. 环境规划

3.1 硬件与端口规划

项目 要求
内存 至少 4GB
磁盘 至少 100GB
Manager 管理端口 5349(与 DMDRS 的 5345/5346 区分)
代理端口 19347(与 DMDRS 代理的 19345/19346 区分)

3.2 数据库用户准备

在源端和目标端分别创建 DMDVS 专用用户:

CREATE USER DMDVS_USER IDENTIFIED BY Dameng123; GRANT DBA TO DMDVS_USER;

生产环境可按最小权限收窄:只需对校验表授予 SELECT 权限即可。

4. DMDVS 安装与配置

4.1 安装步骤

① 创建安装目录(root 用户)

mkdir -p /data/dmdvs5 chown -R dmdba:dinstall /data/dmdvs5 chmod -R 755 /data/dmdvs5

② 执行安装(dmdba 用户)

cd /opt chmod +x dmdvs_*.bin ./dmdvs_*.bin -i

交互选项中关键配置:

配置项 推荐值 说明
安装目录 /data/dmdvs5 统一安装路径
安装组件 1 完整安装
DVS 管理端口 5349 与 DMDRS 区分
站点号 10000 全局唯一
代理端口 19347 与 DMDRS 代理区分

4.2 配置文件 dvs.xml 详解

配置文件位于 /data/dmdvs5/bin/dvs.xml,核心结构如下:

<?xml version="1.0" encoding="GB18030"?> <dvs> <!-- ============ Manager 管理模块 ============ --> <base> <mgr_port>5349</mgr_port> <!-- 管理端口,必配 --> <siteid>10000</siteid> <!-- 站点号,必配,全局唯一 --> <mem_size>2</mem_size> <!-- 最大内存,0=无限制,单位 GB --> <log_limit_size>2</log_limit_size> <!-- 日志上限,单位 GB --> <lang>ch-utf8</lang> <!-- 日志语言 --> </base> <!-- ============ CMP 校验模块 ============ --> <cmp> <cache> <path>/data/dmdvs5/bin/cmp</path> <!-- 缓存目录 --> </cache> <group_min_count>50000</group_min_count> <!-- 分组查询触发阈值 --> <max_md5_buf_size>16</max_md5_buf_size> <!-- MD5 缓存区大小 --> <max_sessions>80</max_sessions> <!-- 最大数据库连接数 --> <task_parallel_limit>5</task_parallel_limit> <!-- 并行任务数 --> <report_dir>/data/dmdvs5/bin/report</report_dir> <cache_det_ignore>0</cache_det_ignore> <!-- 详细报告入缓存库 --> <need_cmp_empty>1</need_cmp_empty> <!-- 空表生成详细报告 --> <round_num>6</round_num> <!-- 浮点数精度 --> <cmp_char_code>GB18030</cmp_char_code> <!-- 字符集 --> <print_interval>10</print_interval> <!-- 终端打印间隔 --> <auto_run>1</auto_run> <!-- 自动启动 CMP 模块 --> </cmp> </dvs>

4.3 服务脚本配置与启动

cd /data/dmdvs5/bin cp service_template/TemplateService ./DvsService vi DvsService # 修改 INSTALL_HOME、PROG_DIR、CONF_PATH 等参数 ./DvsService start ./DvsService status

验证服务:

ps -ef | grep dvsvr | grep -v grep netstat -tlnp | grep 5349

4.4 进入控制台

cd /data/dmdvs5/bin ./drcsl dvs.xml CSL> connect

常用控制台命令:

命令 功能
show mod 查看模块列表,确认 CMP 模块运行中
show lic 查看许可证信息
show version 查看 DMDVS 版本信息
exit 退出控制台

5. 添加校验数据源

5.1 添加校验数据库

# 添加 DM8 源端 CSL> cmp add db dm8 db_src "192.168.21.135" DMDVS_USER Dameng123 5237 # 添加 DM8 目标端 CSL> cmp add db dm8 db_dst "192.168.21.139" DMDVS_USER Dameng123 5236

命令格式CMP ADD DB &lt;db_type> &lt;db_info_name> "&lt;server>" &lt;user> &lt;pwd> &lt;port>

参数 说明
db_type 数据库类型:DM8、Oracle11g、MySQL 等
db_info_name 数据库信息名称(自定义)
server IP 地址或服务名
user/pwd 登录用户名/密码
port 端口号

5.2 查看/修改/删除数据库信息

CSL> show db # 查看所有数据库 CSL> show db db_src # 查看指定数据库 CSL> cmp alter db db_src pwd=NewPassword123 # 修改密码 CSL> cmp remove db db_src # 删除数据库

⚠️ 删除前确认没有正在运行的校验任务依赖该数据库。

6. 核心参数优化

以下参数在 /data/dmdvs5/bin/dvs.xml&lt;cmp> 标签内配置:

参数 作用 默认值 调大场景 调小场景
max_sessions 最大数据库连接数 50 表多、并发校验 数据库连接数有限
group_min_count 分组查询触发阈值 100000 表数据量小 大表、数据量大
max_md5_buf_size MD5 缓存区大小 4MB 内存充足、加快校验 内存紧张
task_parallel_limit 并行任务数 10 多任务并行 资源受限
cache_det_ignore 详细报告入缓存库 1 需要列校验/详细报告 不需要详细报告
need_cmp_empty 空表详细报告生成 0 需要完整差异报告 只需要总体报告

关键说明

  • max_md5_buf_size 实际使用量为配置值的两倍(源端和目标端各一份)
  • PARALLEL 掩码值应小于 max_sessions
  • 使用列校验(COL_CMP|1)时,cache_det_ignore 必须设为 0

7. 执行数据校验

7.1 核心校验掩码

掩码是在 cmp job 命令后附加的参数,用于精细控制校验行为:

掩码 作用 取值范围 优化策略
PARALLEL 并发执行的校验表组数 1~50,默认 10 表多时调大(20~30)
GROUP 单表分组查询线程数 0~20,默认 5 大表调大(8~10)
FAST 快速校验(仅校验行数) 0 或 1 快速检查用 FAST|1
COL_CMP 列校验(定位差异列) 0 或 1 需要定位差异列时用 COL_CMP|1
USERULE 应用校验规则 规则名 需要列映射、行过滤时使用
DEBUG 打印调试信息 0 或 1 定位不一致数据时用 DEBUG|1

7.2 执行校验

基础校验

CSL> cmp job jobname=cmp_test db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1"

表多时调大 PARALLEL

CSL> cmp job jobname=cmp_multi db_src db_dst "DMDRS.*==DMDVS_USER.*" PARALLEL|20 GROUP|5

大表阻塞小表时,大表单独执行

CSL> cmp job jobname=cmp_big db_src db_dst "DMDRS.BIG_TABLE==DMDVS_USER.BIG_TABLE" GROUP|10 # 再校验小表(高并发) CSL> cmp job jobname=cmp_small db_src db_dst "DMDRS.SMALL_*==DMDVS_USER.SMALL_*" PARALLEL|20

快速校验(仅行数)

CSL> cmp job jobname=cmp_fast db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" FAST|1

列校验(定位差异列)

CSL> cmp job jobname=cmp_col db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" COL_CMP|1 CSL> show detail cmp_col "DMDRS.EMPL1"

7.3 查看校验结果

CSL> show cmp_task cmp_test # 查看任务整体进度 CSL> show cmp_table cmp_test # 查看所有表的校验进度 CSL> show report cmp_test # 查看校验报告

show cmp_task 输出解读

字段 说明
表一致数 校验一致的表数量
表差异数 校验不一致的表数量
校验状态 校验成功 / 校验中 / 等待校验
校验任务进度(%) 当前完成百分比

8. 数据修复

发现数据不一致后,DMDVS 可以自动修复目标端数据。

8.1 执行修复

# 查看 job 对应的 task_id CSL> show task cmp_col5 # 执行修复 CSL> cmp repair from cmp_col5 7

修复掩码

掩码 说明
BACKUP|1 修复时进行数据备份
OMITLOB|1 忽略大对象修复

8.2 查看修复进度

CSL> show repair # 查看所有修复任务 CSL> show repair_task 1 # 查看修复任务整体进度 CSL> show repair_table 1 # 查看指定表的修复进度

8.3 验证修复结果

CSL> cmp job jobname=cmp_verify db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" CSL> show report cmp_verify

修复成功后,校验结果应为 “校验成功-数据一致”

8.4 停止修复任务

CSL> cmp stop repair 1

9. 定位不一致数据的方法

当校验报告显示数据不一致时,需要精确定位到具体是哪一行、哪一列不一致。

9.1 row_filter 逐步缩小范围

第一步:粗略定位

CSL> cmp add rule rule_range db_src "DMDRS.EMPL1" row_filter="ID BETWEEN 1 AND 100" CSL> cmp job jobname=cmp_range db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" USERULE|rule_range CSL> show report cmp_range

第二步:精确定位到具体行

CSL> cmp add rule rule_exact db_src "DMDRS.EMPL1" row_filter="ID = 15" CSL> cmp job jobname=cmp_exact db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" USERULE|rule_exact CSL> show detail cmp_exact "DMDRS.EMPL1"

9.2 DEBUG|1 打印详细调试信息

在校验时添加 DEBUG|1 掩码,打印每一行数据的 MD5 值和各列具体值:

CSL> cmp job jobname=cmp_debug db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" DEBUG|1 USERULE|rule_exact

输出解读

字段 含义
COME FROM:0 数据来自源数据库
COME FROM:1 数据来自目标数据库
COL NAME 列名
VALUE 该列的具体值
MD5 VALUE 整行数据的 MD5 值

对比源端和目标端同一行的 MD5 值和各列值,即可精确定位不一致的列。

9.3 组合使用示例(完整流程)

# 1. 创建行过滤规则,定位到具体行 CSL> cmp add rule rule_debug db_src "DMDRS.EMPL1" row_filter="ID = 15" # 2. 使用 DEBUG|1 查看该行的详细数据 CSL> cmp job jobname=cmp_debug db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" DEBUG|1 USERULE|rule_debug # 3. 查看详细差异报告 CSL> cmp job jobname=cmp_detail db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" COL_CMP|1 USERULE|rule_debug CSL> show detail cmp_detail "DMDRS.EMPL1" # 4. 清理测试规则 CSL> cmp remove rule rule_range CSL> cmp remove rule rule_exact CSL> cmp remove rule rule_debug

10. 常见问题与排障

10.1 列校验 show detail 无详细报告

现象:执行 COL_CMP|1 列校验后,show detail 显示"不存在详细差异报告"。

原因

  • cache_det_ignore 默认值为 1,详细报告不入缓存库
  • 目标端为空表时,need_cmp_empty 默认跳过详细数据校验

解决方案

  1. 配置 cache_det_ignore=0need_cmp_empty=1
  2. 重启 DMDVS 服务
  3. 在目标端插入少量数据(使两端都有数据),重新执行列校验
  4. 目标端数据可通过后续数据修复还原

10.2 col_spec/col_omit 规则导致"表结构不一致"

现象:使用 col_spec="ID,NAME"col_omit="AGE" 规则校验时,show report 显示"表结构不一致"。

原因col_speccol_omit 会改变参与校验的列集合。DMDVS 比较的是"源端参与校验的列"与"目标端参与校验的列"是否一致。当列集合不一致时,判定为"表结构不一致"并跳过数据校验。

解决方案:使用 * 通配符规则范围,使规则同时作用于两端:

CSL> cmp add rule rule_spec_all * "DMDRS.EMPL1" col_spec="ID,NAME" CSL> cmp job jobname=cmp_spec db_src db_dst "DMDRS.EMPL1==DMDVS_USER.EMPL1" USERULE|rule_spec_all

总结row_filter 是唯一不影响表结构判断的规则类型。

11. 常用命令速查

操作 命令
进入控制台 ./drcsl dvs.xml
连接服务 connect
添加数据库 cmp add db dm8 db_src "IP" USER PWD PORT
查看数据库 show db
修改数据库 cmp alter db db_src pwd=NewPwd
删除数据库 cmp remove db db_src
添加校验规则 cmp add rule rule_name db_src "SCH.TAB" col_spec="COL1,COL2"
执行校验 cmp job jobname=job_name db_src db_dst "SCH.TAB==DST.TAB" [掩码]
查看任务进度 show cmp_task job_name
查看各表进度 show cmp_table job_name
查看校验报告 show report job_name
查看详细差异 show detail job_name "SCH.TAB"
执行数据修复 cmp repair from job_name task_id
查看修复任务 show repair
查看修复进度 show repair_task repair_id
停止修复 cmp stop repair repair_id
退出控制台 exit

12. 部署检查清单

检查项 验证方法 预期结果
DMDVS 服务运行 ps -ef \| grep dvsvr 进程存在
管理端口监听 netstat -tlnp \| grep 5349 端口 LISTEN
CMP 模块状态 show mod CMP 运行中
数据库添加成功 show db 源端和目标端均已添加
校验执行成功 show report 校验结果正常
列校验详细报告 show detail 有差异数据输出
数据修复成功 show report cmp_verify 校验成功-数据一致

结语

DMDVS 的搭建和校验流程看似步骤不少,但只要理清了配置文件参数、校验掩码含义、数据源添加这几个核心要点,操作起来其实非常顺畅。

在实际生产环境中,建议先小范围验证(如单表校验),确认流程无误后再扩展到全量校验。数据修复操作务必谨慎——修复前建议开启 BACKUP|1 备份选项,一旦修复出现问题,可以通过数据还原快速回滚。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服