注册
达梦数据复制软件DMDRS数据同步搭建
培训园地/ 文章详情 /

达梦数据复制软件DMDRS数据同步搭建

JYX. 2026/08/19 190 0 0

前言
在数据库运维中,数据同步是一项高频需求。DMDRS(达梦数据复制软件)是达梦官方推出的数据复制工具,基于日志的结构化数据复制技术,对源库几乎无影响,可实现秒级数据实时同步。
本文记录了两台银河麒麟V10虚拟机间DM到DM单向同步的搭建过程。

一、DMDRS核心概念
1.1 什么是DMDRS?
DMDRS(达梦数据复制软件)是一种用于同构数据库、异构数据库以及各种数据管理系统之间的数据复制软件。它采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多种场景下的数据复制业务需求。
1.2 核心模块
| 模块 | 全称 | 核心职责 |
| MGR | Manager管理模块 | 解析配置参数,加载和维护其他模块,提供客户端监听与控制命令执行 |
| CPT | 捕获模块 | 对源数据库增量日志进行捕获与解析,转换为内部消息格式 |
| EXEC | 执行模块 | 接收CPT模块发送的增量数据,在目标数据库中进行应用 |
| LOAD | 装载模块 | 完成同步表的字典装载和全量数据的初始装载 |
1.3 工作原理
源数据库的每一次数据变更都会产生对应的重做日志(Redo Log),每条日志记录都有一个唯一的LSN(Log Sequence Number)。源端DMDRS从指定的起始LSN开始,持续捕获并解析增量日志,将解析出的操作转换为内部消息格式,通过网络发送至目标端;目标端DMDRS接收消息后,在目标数据库中执行相应操作,从而实现数据同步。
1.4 支持的拓扑结构
DMDRS支持多种同步拓扑结构:

  • 一对一:一个源端同步到一个目标端
  • 一对多:一个源端同步到多个目标端
  • 多对一:多个源端同步到一个目标端
  • 双向同步:两端互相同步
  • 级联同步:A→B→C链式同步
  • 环形同步:多节点环形同步

二、环境准备
2.1 硬件与系统环境
本文基于两台银河麒麟V10虚拟机搭建DMDRS同步环境:
| 项目 | 源端 | 目标端 |
| IP地址 | 192.168.74.161 | 192.168.74.162 |
| 主机名 | drs1 | drs2 |
| 操作系统 | 银河麒麟 V10 | 银河麒麟 V10 |
| 数据库 | 达梦 DM8 | 达梦 DM8 |
| 数据库端口 | 5236 | 5236 |
| 角色 | 源库 | 目标库 |
2.2 前置条件

  1. 两台虚拟机均已完成达梦数据库软件安装
  2. 两台虚拟机之间网络互通(已通过 ping 测试)
  3. 两台虚拟机均已创建 dmdba 用户
  4. 安装目录统一为 /dm8/dmdrs5

三、数据库准备
DMDRS依赖数据库的归档日志和逻辑日志来捕获数据变更,因此需要在同步开始前完成以下配置。
3.1 开启归档日志
在两台机器上分别执行:
su - dmdba
cd /dm8/bin
./disql SYSDBA@localhost:5236
密码:Dameng@2026
SQL> 提示符下执行:
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=512, SPACE_LIMIT=10240';
ALTER DATABASE OPEN;
3.2 开启逻辑日志
DMDRS通过解析逻辑日志捕获数据变更,需要在 dm.ini 中开启该功能。
在两台机器上分别执行:
CALL SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 1);
验证参数是否生效:
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
应显示 PARA_VALUE = 1
image.png
3.3 创建同步用户
需要在源端和目标端分别创建 DMDRS 专用的数据库用户并授权。
在两台机器上分别执行:
CREATE USER "DMDRS" IDENTIFIED BY "Dameng123";
GRANT DBA, PUBLIC, SOI, VTI TO "DMDRS";

四、安装DMDRS
4.1 创建安装目录
在两台机器上分别执行:
exit # 切换到 root 用户
mkdir -p /dm8/dmdrs5
chown dmdba:dinstall /dm8/dmdrs5
chmod 755 /dm8/dmdrs5
4.2 上传安装包并授权
将 DMDRS 安装包(.bin文件)上传到 /opt 目录,并修改权限:
在两台机器上分别执行:
chown dmdba:dinstall /opt/dmdrs_rev*.bin
chmod 755 /opt/dmdrs_rev*.bin
4.3 执行安装
在两台机器上分别执行:
su - dmdba
cd /opt
./dmdrs_rev*.bin -i
image.png
image.png
4.4 配置环境变量
在两台机器上分别执行:
su - dmdba
echo 'export LD_LIBRARY_PATH=/dm8/dmdrs5/bin:$LD_LIBRARY_PATH' >> ~/.bash_profile
source ~/.bash_profile
echo $LD_LIBRARY_PATH
4.5 注册服务
安装完成后,根据提示使用 root 用户执行脚本注册系统服务:
在两台机器上分别执行:
exit # 切换到 root 用户
/dm8/dmdrs5/scripts/root/root_installer.sh
安装完成后,可通过以下命令查看服务状态:
su - dmdba
cd /dm8/dmdrs5/bin
./DrsService status
4.6 创建DDL辅助表(仅在源端执行)
如果需要同步DDL操作(如 CREATE TABLE、ALTER TABLE 等),需要在源端执行DDL辅助脚本。DDL辅助脚本位于 DMDRS 安装目录的 bin/scripts 下。
注意:若后续需要配置双向同步,则目标端也需执行该脚本。
在源端执行:
cd /dm8/dmdrs5/bin/scripts
./disql SYSDBA@localhost:5236
密码:Dameng@2026
SQL> 提示符下执行:
SET DEFINE OFF;
START ddl_sql_dm8.sql;
验证辅助表和触发器是否创建成功:
SELECT OWNER, TRIGGER_NAME FROM DBA_TRIGGERS WHERE OWNER = 'SYSDBA' AND TRIGGER_NAME LIKE 'DRS_$%' AND STATUS = 'Y';
应看到4个触发器(DRS_$DDL_TRIGGER_AFTERDRS_$DDL_TRIGGER_BEFOREDRS_$DDL_TRIGGER_GRANTDRS_$DDL_TRIGGER_REVOKE)。
image.png
SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'SYSDBA' AND TABLE_NAME LIKE 'DRS_$%' AND STATUS = 'VALID';
应看到9个辅助表。
image.png

五、配置DMDRS服务
5.1 配置目标端(EXEC模块)
在目标端(192.168.74.162)执行:
cd /dm8/dmdrs5/bin
cp conf_sample/exec.xml drs.xml
vi drs.xml
修改为以下内容:
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port>
<siteid>2</siteid>
<lang>ch-utf8</lang>
</base>
<exec>
<name>exec_dm8</name>
<login>
<dbtype>dm8</dbtype>
<server>192.168.74.162</server>
<user>DMDRS</user>
<pwd>Dameng123</pwd>
<port>5236</port>
</login>
</exec>
</drs>
5.2 配置源端(CPT模块)
在源端(192.168.74.161)执行:
cd /dm8/dmdrs5/bin
cp conf_sample/cpt.xml drs.xml
vi drs.xml
修改为以下内容:
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port>
<siteid>1</siteid>
<lang>ch-utf8</lang>
</base>
<cpt>
<name>cpt_dm8</name>
<login>
<dbtype>dm8</dbtype>
<server>192.168.74.161</server>
<user>DMDRS</user>
<pwd>Dameng123</pwd>
<port>5236</port>
</login>
<send>
<ip>192.168.74.162</ip>
<port>5345</port>
<target_name>exec_dm8</target_name>
<map>
<item type="table">..</item>
<item type="object">.
.</item>
</map>
</send>
</cpt>
</drs>
5.3 启动DMDRS服务
先启动目标端:
cd /dm8/dmdrs5/bin
./DrsService start
再启动源端:
cd /dm8/dmdrs5/bin
./DrsService start
image.png
image.png
六、配置同步任务并验证
6.1 配置并启动同步任务
在源端执行以下操作:
cd /dm8/dmdrs5/bin
./drcsl drs.xml
在 CSL> 提示符下依次执行:
connect
alter cpt_dm8 set lsn = 你的LSN值
alter cpt_dm8 add table "sch.name='SYSDBA'"
start
cpt
image.png
image.png
image.png
关于LSN值的说明:你的LSN值 需要替换为源端数据库当前的实际LSN。查询方式为在源端数据库执行 SELECT CURRENT_LSN FROM V$RLOG;。如果不想深究LSN细节,也可以直接使用 alter cpt_dm8 set lsn = -1 表示从当前最新LSN开始同步(部分版本支持)。
执行 cpt 后,状态显示为 RUNNING 表示同步任务已正常启动。
6.2 在源端插入测试数据
在源端另开一个终端执行:

cd /dm8/bin
./disql SYSDBA@localhost:5236
密码:Dameng@2026
CREATE TABLE test_dmdrs (id INT, name VARCHAR(50), create_time DATE);
INSERT INTO test_dmdrs VALUES (1, 'DMDRS同步测试', SYSDATE);
COMMIT;
SELECT * FROM test_dmdrs;
image.png
6.3 在目标端查询验证
在目标端执行:
cd /dm8/bin
./disql SYSDBA@localhost:5236
密码:Dameng@2026
SELECT * FROM test_dmdrs;
如果目标端能查询到相同的数据,说明 DMDRS 同步成功!
image.png

七、总结
本次实践完成了DMDRS在两台达梦数据库之间的部署,验证了基于日志的增量数据同步能力。整个过程对源库无侵入,配置简洁,适合容灾备份、读写分离等场景。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服