注册
DMDRS 数据同步与 DMDVS 校验服务部署、验证及故障复盘
技术分享/ 文章详情 /

DMDRS 数据同步与 DMDVS 校验服务部署、验证及故障复盘

waytoofar 2026/08/07 212 1 0

DMDRS 数据同步与 DMDVS 校验服务部署、验证及故障复盘

从数据复制、增量同步到一致性校验的完整实践

摘要: 本文介绍 DMDRS、DMDVS 与 DMDFM 在 DM8 数据同步场景中的职责分工和协同方式,记录源端与目标端部署、同步表配置、全量装载、DDL/DML 捕获、增量 UPDATE 验证及 DMDVS 一致性校验过程。文章最后结合实验中的模块名、端口、字典加载和校验失败问题,总结定位顺序和部署验收标准。

关键词: DMDRS、DMDVS、DMDFM、DM8、全量装载、增量同步、数据校验、故障排查

1. DMDRS 简介:是什么、做什么、有什么优势

DMDRS(DM Data Replication Service)是达梦数据库提供的数据复制服务,用于在源数据库和目标数据库之间传输、装载并持续同步符合配置范围的数据对象和变更。

DMDRS 不是单纯的数据库备份工具,而是一条由“源端捕获、网络传输、目标端执行”组成的同步链路。

在本次实验中,DMDRS 先完成 EMPLOYEEORDERS 等对象的全量装载,再继续捕获源端的 CREATEINSERTINDEXUPDATE 等操作,使目标端能够获得对应的表结构和数据变化。

常见应用方向包括:

  • 数据迁移;
  • 同构或异构环境间的数据同步;
  • 容灾建设中的数据复制;
  • 测试环境的数据持续更新。

结合本次 DM8 实验,DMDRS 的主要优势体现在以下几个方面:

  1. 与 DM8 数据库及 DMDFM 管理体系衔接紧密,便于统一查看和管理;
  2. 同步对象和操作类型可以按配置筛选,能够控制复制范围;
  3. 支持全量装载与增量同步组合,适合从初始数据切换到持续同步;
  4. 控制台和 DRS 命令能够查看运行状态、字典加载和错误信息,便于按模块名、服务端口和装载状态逐层定位问题。

组件边界: DMDRS 负责复制,DMDVS 负责一致性校验,DMDFM 负责图形化管理和代理通信。三者相互配合,但不能相互替代。

2. 方案定位:复制、管理与校验分工

本次方案中,各组件的职责如下:

  • DMDRS: 负责源库到目标库的数据复制;
  • CPT: 位于源端,捕获 DDL 和 DML 变化;
  • EXEC: 位于目标端,接收并执行同步内容;
  • DMDFM: 用于图形化配置和服务管理;
  • DMDVS: 作为独立校验服务,比较指定对象的数据一致性。

这几个组件不能相互替代:DMDVS 校验失败不等于 DMDRS 一定停止,DMDRS 装载报错也不能靠 DMDVS 自动修复。排查时应先确认问题属于复制、管理通信还是一致性校验层。

3. 实验环境与端口

节点 地址 实例 / 组件 端口
源端 drssrc 192.168.80.** DRSSRC / instance1 / CPT link1 5236 / 5345
目标端 drsdst 192.168.80.** DRSDST / instance2 / EXEC 5236 / 5346
校验服务 部署在 drsdst DMDVS + DMDFM Agent 5349 / 19345

端口用途如下:

  • 5236:数据库服务端口;
  • 5345 / 5346:DMDRS 管理端口;
  • 5349:DMDVS 服务端口;
  • 19345:DMDFM Agent 端口。

01_实验拓扑.png
图 1:DMDRS 与 DMDVS 的实验拓扑

02_DMDRS部署状态页面.png

图 2:DMDRS 部署状态页面

4. DMDRS 部署教程

步骤 1:准备目录和数据库

源端和目标端分别准备数据库、归档和 DRS 目录,统一交给 dmdba:dinstall 管理。初始化数据库后先正常启动、退出一次,再进入 DRS 配置阶段。

# 源端 drssrc mkdir -p /dmdata/data /dmarch/DRSSRC /data/dmdrs5 chown -R dmdba:dinstall /dmdata /dmarch /data/dmdrs5 chmod -R 755 /dmdata /dmarch /data/dmdrs5 # 目标端 drsdst mkdir -p /dmdata/data /data/dmdrs5 chown -R dmdba:dinstall /dmdata /data/dmdrs5 chmod -R 755 /dmdata /data/dmdrs5

数据库两端应保持以下环境一致:

  • DM8 版本;
  • 操作系统位数;
  • 时区和系统时间;
  • 数据库运行用户和目录权限。

源库启用本地归档和逻辑日志,目标库准备同版本数据库和 DRS 目标实例。

步骤 2:先确认服务,再配置模块

开始配置前,先检查源端和目标端的服务、端口及 drsvr 进程。

# 源端 ss -lntp | grep ':5345 ' || echo '源端 instance1 未监听' pgrep -af drsvr || echo '源端没有 drsvr' # 目标端 ss -lntp | grep ':5346 ' || echo '目标端 instance2 未监听' pgrep -af drsvr || echo '目标端没有 drsvr'

当前工程中,源端服务名是 instance1,CPT 模块名是 link1;目标端服务名是 instance2。控制台命令必须使用配置中的实际模块名。

cd /home/dmdba/dmdrs5/INST_DRS/instance1 grep -n '<name>' drs.xml grep -nE '<map>|<item' drs.xml # 典型输出对应 # instance1 = DMDRS 服务 # link1 = CPT 模块 # DRS_TEST.EMPLOYEE==DRS_TEST.EMPLOYEE # DRS_TEST.ORDERS==DRS_TEST.ORDERS

03_DMDFM两端服务配置.png

图 3:DMDFM 一对一场景中的 DMDRS 两端配置

04_link1同步表映射.png

图 4:DMDFM 中 link1 同步表映射

5. 全量装载与增量同步教程

步骤 3:设置 LSN 与添加同步表

CPT 首次启动前,先使用当前源库日志位置设置增量起点。随后使用真实模块名 link1 添加表,并执行 CREATEINSERTINDEX 等装载掩码。

# 源端 drssrc / drcsl cd /home/dmdba/dmdrs5/INST_DRS/instance1 ./drcsl connect 127.0.0.**:5345 alter link1 set lsn alter link1 add table \ "sch.name='DRS_TEST' and tab.name='EMPLOYEE'" CREATE|INSERT|INDEX alter link1 add table \ "sch.name='DRS_TEST' and tab.name='ORDERS'" CREATE|INSERT|INDEX show link1 load table running show link1 load table error

小数据量实验中,running 状态可能很快消失,因此必须同时到目标数据库检查表和行数。装载完成且无错误后,再执行 start link1

start link1 show mode

目标端使用 DIsql 检查表和数据量:

SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'DRS_TEST' AND TABLE_NAME IN ('EMPLOYEE', 'ORDERS'); SELECT COUNT(*) FROM DRS_TEST.EMPLOYEE; SELECT COUNT(*) FROM DRS_TEST.ORDERS;

05_DMDRS装载状态与同步表结果.png

图 5:DMDRS 装载状态与同步表结果

步骤 4:执行 DDL 与 DML 实测

对已经加入映射范围的 EMPLOYEE 增加 ARTICLE9_TAG 字段,可以验证 DDL 捕获和目标端字段变化。

材料中还按教程记录了 DMDRS.TEST 的建表、插入和索引测试。新测试表必须先加入同步映射,否则只能证明源端 SQL 执行成功,不能证明 DMDRS 完成同步。

-- 已映射表的 DDL 测试:源端 ALTER TABLE DRS_TEST.EMPLOYEE ADD ARTICLE9_TAG VARCHAR2(30); -- 教程测试表:源端 DMDRS 用户 CREATE TABLE TEST ( ID INT, NAME VARCHAR2(20) ); INSERT INTO TEST VALUES (1, 'PP'); INSERT INTO TEST VALUES (3, 'AA'); COMMIT; CREATE INDEX TESTINDEX ON TEST(ID);

06_DMDFM_DDL同步配置.png

图 6:DMDFM 中的 DDL 同步配置

07_EMPLOYEE字段变更.png

图 7:源端对 EMPLOYEE 执行 ALTER TABLE 并确认字段

08_TEST建表插入与索引.png

图 8:源端创建 DMDRS.TEST、插入数据并创建索引

09_目标端确认用户.png

图 9:目标端确认 DMDRS 用户存在

10_目标端出现TEST表.png

图 10:目标端自动出现 TEST 表并查询两行数据

11_源端继续写入测试数据.png

图 11:源端继续向 TEST 写入同步测试数据

12_目标端查询新增数据.png

图 12:目标端查询到新增数据

13_TESTINDEX状态.png

图 13:目标端确认 TESTINDEX 状态为 VALID

步骤 5:验证增量 UPDATE

在源端更新 DMDRS.TEST 记录并提交,再到目标端查询结果。

-- 源端 UPDATE DMDRS.TEST SET NAME = 'PP_UPDATE' WHERE ID = 1; COMMIT; -- 目标端 SELECT * FROM DMDRS.TEST ORDER BY ID;

验证链路应保持单向:源端执行 DDL/DML,目标端只查询结果。目标端手工修改同步表会引入新的差异,影响后续 DMDVS 校验。

14_源端UPDATE提交.png

图 14:源端执行 UPDATE 并提交

15_目标端查询UPDATE结果.png

图 15:目标端查询更新后的记录

6. 部署并执行 DMDVS 校验

DMDVS 安装在 drsdst,复用 DMDFM Agent,服务端口为 5349,缓存目录为 /home/dmdba/dmdvs_cache,DM8 依赖路径为 /home/dmdba/dmdbms/bin

# 目标端 drsdst mkdir -p /home/dmdba/dmdvs /home/dmdba/dmdvs_cache chmod 755 /home/dmdba/dmdvs /home/dmdba/dmdvs_cache ss -lntp | grep -E ':19345 |:5349 |:5236 ' || true
配置项 本次值
主机 / 服务 192.168.80.** / 校验服务
安装 / 缓存 /home/dmdba/dmdvs / /home/dmdba/dmdvs_cache
Agent 192.168.80.**:19345,复用已有代理
服务端口 5349
校验规则 DRS_TEST.EMPLOYEE==DRS_TEST.EMPLOYEEDRS_TEST.ORDERS==DRS_TEST.ORDERS

DMDVS 校验成功的判定包括:

  1. 校验服务在线;
  2. 校验规则能够识别对象;
  3. 校验任务执行完成;
  4. 差异数据为 0。

校验成功后仍应保留任务记录和结果截图,作为部署验收证据。

16_DMDVS远程安装成功.png

图 16:DMDVS 远程安装成功页面

17_DMDVS校验服务详情.png

图 17:DMDVS 校验服务详情页面

18_DMDVS校验任务成功.png

图 18:DMDVS 校验任务成功页面

7. 常见错误与定位顺序

错误 / 现象 根因 定位与处理
DRS-3008:模块未找到 把教程中的 cpt_dm8 当成当前模块名 grep drs.xml 确认实际模块名,用 link1 替换命令中的模块名
DRS-5125:离线字典加载失败 未完成 add table,或字典未被 link1 加载 依次执行 show dictset lsnadd table,装载完成后再执行 start link1
DRS-6165:目标端表已存在 重复装载且未使用 DROP 先查询对象;实验表可清场重装,业务表不要直接 DROP
页面显示 0 张表 服务、模块、字典或页面状态不一致 先查 5345/5346drsvrshow modeshow dict,不要先反复点击识别表
DMDVS 校验失败 代理、服务端口或校验规则不一致 先查 19345/5349,再核对 DRS_TEST 模式和表名规则

排查时应遵循以下原则:

  • 任何有副作用的操作先查状态;
  • 先确认主机、用户和命令提示符,再执行命令;
  • 源端执行写操作,目标端只做查询;
  • 先判断错误所属层级,不要把 DMDVS、DMDFM 和 DMDRS 问题混为一谈。

8. 验收清单

检查项 通过标准
源端 instance1 5345 监听,drsvr 存在,link1 运行
目标端 instance2 5346 监听,drsvr 存在,目标表可查询
全量装载 目标端表结构和数据量与源端一致
增量同步 INSERT / UPDATE / DELETE 在目标端得到相同结果
DDL 同步 ARTICLE9_TAGTESTINDEX 在目标端可核对
DMDVS 校验任务成功,差异数据为 0

9. 总结

本次实践完成了 DMDRS 源端和目标端部署、同步表配置、全量装载、DDL/DML 增量同步、UPDATE 验证,以及 DMDVS 一致性校验的完整流程。

其中,DMDRS 关注数据是否能够按照映射关系复制,DMDVS 关注指定对象在源端和目标端是否一致,DMDFM 则提供图形化配置和服务管理入口。实际排查时,应先确认服务、模块、端口和字典状态,再分析同步结果或校验差异。

10. 参考资料

  1. 达梦技术文档:DMDRS 产品介绍
  2. 达梦技术文档:DMDRS 安装部署
  3. 达梦技术文档:DMDRS 功能特性
  4. 达梦技术文档:DMDFM 平台介绍
  5. 达梦数据库:达梦数据校验软件 DMDVS
  6. 达梦技术文档:DMDRS 常见问题
  7. 达梦技术社区:DMDRS 安装文档

THE END

达梦社区地址:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服