DMDVS 达梦数据校验软件 📅 2026/8/27 8:13:56 一、前言DMDVS 支持 DM、Oracle、MySQL、PostgreSQL、人大金仓等多种同构、异构数据库不止可以比对数据差异还支持差异修复、修复数据备份、异常还原同时适配普通内网、网闸单向隔离、多级中转机等复杂政企网络环境。在数据同步之后不能只关注数据同步是否跑起来却忽略数据一致性校验。同步工具只能保证链路正常不能保证两边数据完全一模一样DMDVS 就是达梦原生解决这个问题的工具。二、DMDVS 整体产品架构DMDVS 采用模块化组件设计主程序dvsvr代理程序dvagent控制台console一共五大核心模块每个模块职责清晰看懂模块才能理解不同校验场景的部署逻辑。Manager 管理模块整个 DMDVS 的总框架负责端口监听、加载其他子模块接收 console 控制台下发命令。配置标签base核心参数mgr_port监听端口siteid全局唯一站点 ID。一台机器部署多套 DMDVS端口、siteid 必须不能重复。CMP 核心校验模块业务核心承担绝大多数工作数据读取、比对校验、报告生成、数据修复、备份、还原。静态、动态校验主要靠 CMP。配置标签cmp缓存路径、报告路径、最大会话数、内存缓冲区都在这里配置。CMP_AGENT 数据代理模块dvagent独立服务dvagent。当源库大对象多、跨网络远程读取慢时把 dvagent 部署在数据库本机本地读取数据库数据再转发给 DMDVS 服务端减少网络传输开销。仅支持 DM8、Oracle 数据库。PROXY 网络 / 文件转发模块适配隔离网络提供网络转发、文件转发。多用于网闸、单向传输、中转机环境实现跨隔离区的数据传递。Console 远程控制台交互式命令行客户端TCP 连接 dvsvr 服务。日常几乎所有操作添加库、启动校验、查看进度、查看报告、执行修复全部在 console 中完成。两个可执行程序区分dvsvrDMDVS 主服务包含 Manager、CMP、PROXY 模块dvagent数据代理服务只有 CMP_AGENT 模块用来做本地代理读取数据。三、四大核心校验应用场景DMDVS 最重要的就是区分 4 种校验模式不同网络环境选对应的模式不要混用。校验模式网络前提是否支持修复LOB 大对象支持典型业务场景静态数据校验DMDVS 服务器可同时连通源库、目标库✅支持✅支持迁移完成后停机全量核对动态数据校验双库网络互通搭配 DMDRS 同步✅支持✅支持同步链路不停机巡检一致性单向数据校验网闸隔离单方向网络无法同时访问双库可手动开启❌不支持 LOB政务电力正向网闸环境中转数据校验多级中转机源目标完全不能互通❌不支持❌不支持多级隔离、跨网闸严格安全网络3.1 静态数据校验最常用适用条件DMDVS 服务可以同时访问源数据库与目标数据库。 原理DMDVS 分别直连源、目标库拉取两边数据逐行比对生成差异报告。重要提醒业务持续写入的系统直接跑静态校验会产生大量虚假差异。要么业务短暂静止要么改用动态校验。 支持完整能力行数校验、结构校验、全量明细校验、差异修复、修复备份还原。3.2 动态数据校验配合 DMDRS 复制软件适用条件正在运行 DMDRS 数据同步业务持续写入不需要停机。 限制仅支持 DM8、Oracle数据库必须开启闪回功能。 原理对接 DMDRS 的 CPT 捕获模块、EXEC 执行模块只校验已经同步完成的数据不需要业务停写。适合同步链路常态化巡检。3.3 单向数据校验网闸隔离网络限制DMDVS 一台机器无法同时访问源库、目标库网络只能单向通行。 部署方式部署两套 DMDVS分为发送端、接收端。发送端读取源库单向把数据传给接收端接收端连接目标库做比对报告生成在接收端。 限制默认不支持大 LOB 字段校验LOB 列会自动跳过需要修复必须手动开启need_repair1开启后会增加磁盘占用性能下降。3.4 中转数据校验多级中转隔离适用源数据库、目标数据库完全隔离中间经过一台或者多台中转机电力行业非常多见。 部署两套 DMDVS 分别部署在发送中转机、接收中转机通过 CIME 规范文件传递数据。中转模式不支持修复不支持 LOB。四、核心功能能力详解4.1 三种校验粒度按需选择快速校验FAST仅统计表行数不比对明细行。速度最快适合前期粗核对看两边表记录数是否大体一致。仅表结构校验只比对字段名、字段类型、主键约束不读取行数据适合迁移后先核对表结构是否对齐。详细数据校验结构 全部行数据比对还支持COL_CMP列校验定位到具体哪一列数据不一致需要表存在主键。4.2 灵活校验规则 Rule可以预先定义 rule 校验规则校验任务直接引用不用每次重复写条件支持四类规则列映射 col_map源列名和目标列名不一致配置源列目标列做映射列忽略 col_omit指定某些列跳过校验例如更新时间、自动时间戳这类业务会实时变化的字段行过滤 row_filter增加 where 条件只校验部分业务数据列阈值 col_ath针对数值字段允许百分比 / 固定数值误差适合浮点业务。规则使用命令示例#新增规则忽略CITY、POSTALCODE两列 cmp add rule rule_omit_city db_src PERSON.ADDRESS col_omitCITY,POSTALCODE4.3 校验报告体系校验完成自动生成报告两种输出方式本地文件报告存放在cmp标签report_dir配置目录包含汇总报告、差异明细报告入库可以把校验结果写入 DM8/Oracle 外部数据库方便平台统一巡检、做定时巡检报表。4.4 数据修复、备份、还原静态、动态校验支持差异修复可以将目标库数据对齐源库。执行修复时务必带上 BACKUP 掩码开启备份修复前备份目标端原始数据。一旦修复出错可以执行还原命令恢复修复之前的数据。 单向校验修复需要手动开启need_repair中转校验完全不支持修复。 部分数据库存在限制MySQL 必须双表都有主键GBase8s 不支持备份还原。五、XML 核心配置重点参数DMDVS 使用 xml 作为配置文件分为baseManager 模块cmpCMP 校验模块base 模块Managerbase mgr_port5349/mgr_port !--服务监听端口多实例必须唯一 -- siteid1/siteid !--站点ID全局唯一1~30000 -- mem_size16/mem_size !--程序最大可用内存GB -- log_limit_size10/log_limit_size !--日志总大小上限防止日志占满磁盘 -- langch-utf8/lang !--日志字符集建议utf8 -- /basecmp 模块核心校验cmp cache path/dmdata/dmdvs/cmp/path !--缓存临时文件目录磁盘空间要充足 -- /cache report_dir/dmdata/dmdvs/report/report_dir !--校验报告存放目录 -- max_sessions50/max_sessions !--最大数据库会话不能超过数据库max_sessions -- task_parallel_limit10/task_parallel_limit !--最大并发任务数 -- diff_limit1000/diff_limit !--报告最多输出多少条差异行 -- save_report_days30/save_report_days !--报告自动保留30天过期删除 -- /cmp⚠️内存坑点CMP 下面所有缓冲区内存总和不能超过 mem_size 配置的 90%否则 dvsvr 启动直接失败。六、Console 控制台实操命令静态校验为主启动服务后进入 bin 目录执行./console进入交互式控制台。基础查看命令show mod; #查看模块运行状态确认cmp模块已经start show lic; #查看授权信息没有授权只能试用 show version; #查看DMDVS版本 help cmp; #查看cmp全部命令帮助添加源库、目标库信息静态校验必须添加#添加Oracle源库自定义库别名db_src cmp add db oracle11g db_src 192.168.1.100:1521/orcl dmdvs dmdvs; #添加DM8目标库别名db_dst端口5236 cmp add db dm8 db_dst 192.168.1.101 SYSDBA SYSDBA 5236; show db; #查看已经添加的数据库信息执行校验任务#校验PERSON模式下全部表作业名cmp_person cmp job jobnamecmp_person db_src db_dst PERSON.*PERSON.*; show job; #查看全部作业列表 show cmp_task cmp_person; #查看任务校验进度 show report cmp_person; #查看校验汇总报告 show detail cmp_person PERSON.ADDRESS; #查看单张表差异明细数据修复开启备份#修复cmp_person作业全部差异表BACKUP|1开启修复备份 cmp repair from cmp_person 1 BACKUP|1; show repair; #查看修复任务状态数据还原修复出错的时候回滚cmp res db_dst PERSON.ADDRESS;停止任务cmp stop job cmp_person;补充动态校验使用dcmp job单向校验使用cmp job不需要 add db中转校验命令tcmp job。七、注意内存配置超限cmp 各个 buffer 内存总和超过 mem_size 的 90%dvsvr 直接启动失败日志报内存申请失败。会话数设置不合理max_sessions设置过大校验大量表瞬间耗尽数据库会话过小校验任务卡住。要和数据库最大会话匹配。业务不停机直接跑静态校验业务持续写入不断产生新数据校验出现大量虚假差异。业务不停机场景优先选动态校验 DMDRS 联动。生产修复忘记 BACKUP 备份掩码修复异常之后没有办法回滚必须开启备份。单向 / 中转场景误以为支持 LOB校验报告全部显示一致但大对象列根本没有比对留下业务隐患。动态校验没有开启数据库闪回DM8 需要配置TRX_VIEW_MODE1否则动态校验直接报错。缓存 cache、report 报告目录磁盘不足校验大表会产生大量临时文件磁盘满会直接任务失败。字符集不统一单向校验发送端接收端cmp_char_code必须一致否则比对结果乱码、出现大量虚假差异。九、排查问题简单思路校验结果大量不一致不要直接执行修复建议排查步骤查看详细报告拿到差异行主键 / ROWID配置 row_filter 行过滤规则单独把这一行重新校验开启 debug 掩码打印每一列真实值区分是业务真实数据不一致还是字符集、空格、时间格式、浮点精度这类参数导致的伪差异确认是真实业务差异之后再执行修复。程序异常退出查看drs_halt.log kill日志定位崩溃原因。十、总结DMDVS 作为达梦生态里面重要的数据一致性校验组件是迁移、DMDRS 同步项目中必不可少的工具。分清四大校验场景静态适合停机全量比对动态适合 DMDRS 不停机巡检单向、中转适配网闸隔离网络同时二者有 LOB、修复的限制理清五大模块dvsvr 主服务、dvagent 数据代理、console 控制台每个模块各司其职善用 rule 校验规则处理列名不一致、忽略时间戳字段、数值阈值修复是高危操作需开启备份需要重点关注内存、会话、磁盘、字符集、license 这几个高频故障。达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台