注册
DMHS同步原理与DM8到DM8基础搭建
专栏/技术分享/ 文章详情 /

DMHS同步原理与DM8到DM8基础搭建

济楚 2026/07/17 179 0 0
摘要

一、DMHS简介

DMHS是达梦数据实时同步软件,主要用于同构或异构数据库之间的数据实时复制。它通过解析源数据库日志获取INSERT、UPDATE、DELETE和DDL等操作,再将这些变化发送到目标端执行,不需要通过业务表触发器持续捕获DML数据。

DMHS可以配置一对一、一对多、多对一和级联等同步结构,常用于数据迁移、实时备份、容灾和数据分发。DMHS系统组成说明

二、DMHS同步原理

DMHS主要由以下模块组成:

模块 作用
MGR 管理DMHS服务和其他模块
LOAD 完成表结构及存量数据的初始装载
CPT 解析源数据库日志,捕获增量变化
NET 过滤、映射并传输同步消息
EXEC 将接收到的数据变化写入目标数据库

一次完整的数据同步通常包括全量装载和增量同步两个阶段。

全量装载由LOAD模块读取源端表结构和现有数据,在目标数据库中创建对应对象并写入存量数据。增量同步由CPT模块持续解析源数据库日志,再通过NET模块将变化发送到目标端,最后由EXEC模块还原并执行相应操作。

源数据库
→ LOAD全量装载
→ CPT捕获增量日志
→ NET传输
→ EXEC执行
→ 目标数据库

三、环境规划

本文使用两个DM8实例完成单向同步。

节点 地址 作用
源端 192.168.159.133:5236 提供APP模式下的源数据
目标端 192.168.159.130:5236 接收APP模式下的数据
DMHS管理端口 5345 接收控制台管理命令
DMHS数据端口 5346 接收源端同步消息

源端和目标端均需安装与操作系统、硬件架构和数据库类型匹配的DMHS软件,并准备对应的libdmoci.so动态库。

export DMHS_HOME=/dm8/dmhs export PATH=$DMHS_HOME/bin:$PATH export LD_LIBRARY_PATH=$DMHS_HOME/bin:$DM_HOME/bin:$LD_LIBRARY_PATH

可以使用ldd检查DMHS模块是否缺少动态库。

ldd $DMHS_HOME/bin/libcpt_dm8.so ldd $DMHS_HOME/bin/libdmhs_exec.so

四、数据库准备

1. 开启源数据库归档

ALTER DATABASE MOUNT; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/arch,TYPE=LOCAL,FILE_SIZE=512,SPACE_LIMIT=10240'; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;

2. 开启逻辑日志

CALL SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);

检查参数是否生效:

SELECT PARA_NAME,PARA_VALUE,SESS_VALUE,FILE_VALUE FROM V$DM_INI WHERE PARA_NAME='RLOG_APPEND_LOGIC';

3. 配置DDL同步

如果需要同步建表、修改表结构等DDL操作,需要在源数据库执行DMHS安装目录中提供的DDL脚本,并在CPT配置中设置ddl_mask

4. 准备同步用户

源端用户需要具有源表查询和日志读取权限,目标端用户需要具有建表及数据写入权限。本文使用源端和目标端已有的APP用户进行同步。

五、配置目标端DMHS

在目标端编辑dmhs.hs

<?xml version="1.0" encoding="GB2312"?> <dmhs> <base> <lang>ch</lang> <mgr_port>5345</mgr_port> <ckpt_interval>60</ckpt_interval> <siteid>2</siteid> <version>2.0</version> </base> <exec> <recv> <data_port>5346</data_port> </recv> <db_type>dm8</db_type> <db_server>192.168.159.130</db_server> <db_user>APP</db_user> <db_pwd>Dameng123</db_pwd> <db_port>5236</db_port> <exec_thr>4</exec_thr> </exec> </dmhs>

mgr_port是DMHS管理端口,data_port用于接收源端数据,siteid是同步节点的唯一标识,exec_thr表示目标端数据执行线程数。

六、配置源端DMHS

在源端编辑dmhs.hs

<?xml version="1.0" encoding="GB2312"?> <dmhs> <base> <lang>ch</lang> <mgr_port>5345</mgr_port> <siteid>1</siteid> <version>2.0</version> </base> <cpt> <db_type>dm8</db_type> <db_server>192.168.159.133</db_server> <db_user>APP</db_user> <db_pwd>Dameng123</db_pwd> <db_port>5236</db_port> <parse_thr>1</parse_thr> <ddl_mask>op:obj</ddl_mask> <arch> <clear_interval>600</clear_interval> <clear_flag>0</clear_flag> </arch> <send> <ip>192.168.159.130</ip> <mgr_port>5345</mgr_port> <data_port>5346</data_port> <filter> <enable> <item>APP.*</item> </enable> </filter> <map> <item>APP.*==APP.*</item> </map> </send> </cpt> </dmhs>

filter用于设置同步对象白名单,map用于设置源端对象与目标端对象的映射关系。这里表示将源端APP模式下的对象同步到目标端APP模式。

七、启动数据同步

先启动目标端DMHS服务:

cd $DMHS_HOME/bin ./dmhs_server

进入控制台并启动EXEC模块:

DMHS> start exec

然后启动源端DMHS服务并进入控制台:

cd $DMHS_HOME/bin ./dmhs_server ./dmhs_console

清理目标端原有同步起点:

DMHS> clear exec lsn

执行APP模式的全量装载:

DMHS> copy 0 "SCH.NAME='APP'" CREATE|INSERT|INDEX|COMMENT

全量数据装载完成后启动CPT模块:

DMHS> start cpt

CPT启动后会持续解析源数据库日志,将新的数据变化发送到目标端。DM8到DM8部署示例

八、同步验证

在源端插入一条测试数据并提交:

INSERT INTO APP.STUDENTS VALUES (1001,'TEST USER',SYSDATE); COMMIT;

在目标端查询:

SELECT * FROM APP.STUDENTS WHERE ID=1001;

如果目标端能够查询到新增数据,说明增量同步已经正常运行。实际使用时还应检查源端CPT、目标端EXEC、网络连接和同步检查点状态,确认同步链路不存在异常或明显延迟。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服