本文记录 DM8 环境中 DMDRS 的源端/目标端部署、全量装载、增量同步和 DMDVS 一致性校验
1. DMDRS 简介:是什么、做什么、有什么优势
DMDRS(DM Data Replication Service)是达梦数据库提供的数据复制服务,用于在源数据库和目标数据库之间传输、装载并持续同步符合配置范围的数据对象和变更。它不是单纯的数据库备份工具,而是一条由源端捕获、网络传输、目标端执行组成的同步链路。
在本次实验中,DMDRS 先完成 EMPLOYEE、ORDERS 等对象的全量装载,再继续捕获源端的 CREATE、INSERT、INDEX、UPDATE 等操作,使目标端能够获得对应的表结构和数据变化。常见应用方向包括数据迁移、异构或同构环境间的数据同步、容灾建设中的数据复制,以及测试环境的数据持续更新;具体适用范围仍需结合版本、拓扑和业务要求确认。
结合本次 DM8 实验,达梦 DMDRS 的主要优势体现在四点:一是与 DM8 数据库及 DMDFM 管理体系衔接紧密,便于统一查看和管理;二是同步对象和操作类型可以按配置筛选,能够控制复制范围;三是支持全量装载与增量同步组合,适合从初始数据切换到持续同步;四是控制台和 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。
图 DMDRS 与 DMDVS 的实验拓扑
图 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:先确认服务,再配置模块
# 源端 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
图 DMDFM 一对一场景中的 DMDRS 两端配置
图 DMDFM 中 link1 同步表映射
5. 全量装载与增量同步教程
步骤 3:设置 LSN 与添加同步表
CPT 首次启动前,先用当前源库日志位置设置增量起点。随后使用真实模块名 link1 添加表并执行 CREATE、INSERT、INDEX 等装载掩码。
# 源端 drssrc / drcsl cd /home/dmdba/dmdrs5/INST_DRS/instance1 ./drcslconnect 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;图 DMDRS 装载状态与同步表结果
步骤 4:执行 DDL 与 DML 实测
对已在映射范围内的 EMPLOYEE 增加 ARTICLE9_TAG 字段,可以验证 DDL 捕获和目标端字段变化。材料中还按教程记录了 DMDRS.TEST 的建表、插入和索引测试。新测试表必须先加入同步映射,否则只能证明源端 SQL 成功。
-- 已映射表的 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);图 DMDFM 中 DDL 同步配置
图 源端对 EMPLOYEE 执行 ALTER TABLE 并确认字段
图 源端创建 DMDRS.TEST、插入数据并创建索引
图 目标端确认 DMDRS 用户存在
图 目标端自动出现 TEST 表并查询两行数据
图 源端继续向 TEST 写入同步测试数据
图 目标端查询到新增数据
图 目标端确认 TESTINDEX 状态为 VALID
步骤 5:验证增量 UPDATE
-- 源端 UPDATE DMDRS.TEST SET NAME='PP_UPDATE' WHERE ID=1; COMMIT; -- 目标端 SELECT * FROM DMDRS.TEST ORDER BY ID;图 源端执行 UPDATE 并提交
图 目标端查询更新后的记录
验证链路应保持单向:源端执行 DDL/DML,目标端只查询结果。目标端手工修改同步表会引入新的差异,影响后续 DMDVS 校验。
步骤 6:部署并执行 DMDVS 校验
DMDVS 安装在 drsdst,复用 192.168.80.**:19345 的 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.EMPLOYEE;DRS_TEST.ORDERS==DRS_TEST.ORDERS |
DMDVS 校验成功的判定是:服务在线、规则能够识别对象、任务执行完成且差异为 0。校验成功后仍应保留任务记录和结果截图,作为部署验收证据。
图 DMDVS 远程安装成功页面
图 DMDVS 校验服务详情页面
图 DMDVS 校验任务成功页面
7. 常见错误与定位顺序
错误 / 现象 | 根因 | 定位与处理 |
DRS-3008:模块未找到 | 把教程中的 cpt_dm8 当成当前模块名 | grep drs.xml;用实际的 link1 替换命令中的模块名 |
DRS-5125:离线字典加载失败 | 未完成 add table,或字典未被 link1 加载 | show dict;set lsn;add table;检查装载后再 start link1 |
DRS-6165:目标端表已存在 | 重复装载且未使用 DROP | 先查询对象;实验表可清场重装,业务表不要直接 DROP |
页面显示 0 张表 | 服务、模块、字典或页面状态不一致 | 先查 5345/5346、drsvr、show mode、show dict,不要先反复点识别表 |
DMDVS 校验失败 | 代理、服务端口或校验规则不一致 | 先查 19345/5349,再核对 DRS_TEST 模式和表名规则 |
操作原则:任何有副作用的操作先查状态;先确认主机、用户和提示符,再执行命令;源端做写操作,目标端做查询;遇到错误先看错误码对应的层级,不要把 DMDVS、DMDFM 和 DMDRS 的问题混为一谈。
8. 验收清单
检查项 | 通过标准 |
源端 instance1 | 5345 监听,drsvr 存在,link1 运行 |
目标端 instance2 | 5346 监听,drsvr 存在,目标表可查询 |
全量装载 | 目标端表结构和数据量与源端一致 |
增量同步 | INSERT / UPDATE / DELETE 在目标端得到相同结果 |
DDL 同步 | ARTICLE9_TAG 或 TESTINDEX 在目标端可核对 |
DMDVS | 校验任务成功,差异数据为 0 |
参考资料
- 达梦技术文档:《DMDRS 产品介绍》
产品介绍 | 达梦技术文档 - 达梦技术文档:《DMDRS 安装部署》
安装部署 | 达梦技术文档 - 达梦技术文档:《DMDRS 功能特性》
功能特性 | 达梦技术文档 - 达梦技术文档:《DMDFM 平台介绍》
平台介绍 | 达梦技术文档 - 达梦数据库:《达梦数据校验软件 DMDVS》
达梦数据校验软件 | 达梦数据库 - 达梦技术文档:《DMDRS 常见问题》
DMDRS常见问题 | 达梦技术文档 - 达梦技术社区:《DMDRS 安装文档》
DMDRS安装文档 | 达梦技术社区
THE END
达梦社区地址:https://eco.dameng.com