注册
DMHS 实现 DM8 到 DM8 单向同步:部署与验证
专栏/技术分享/ 文章详情 /

DMHS 实现 DM8 到 DM8 单向同步:部署与验证

wwhhdd 2026/08/28 123 1 0
摘要

DMHS 实现 DM8 到 DM8 单向同步:部署与验证

一、前言

DMHS 是达梦数据库实时同步工具,可将源端数据库产生的逻辑变化捕获后发送到目标端,并由目标端执行,从而实现数据的实时同步。

本文以 DM8 到 DM8 单向同步 为例,记录 DMHS 在 CentOS 7 x86_64 虚拟机环境中的部署、配置、启动和验证过程。

本文为实验环境部署记录,实际生产环境需要结合 DMHS 版本、数据库版本、授权信息和官方手册调整参数及权限。

二、同步架构

本次部署采用一对一单向同步架构:

源端 DM8 + DMHS CPT  ────────>  目标端 DM8 + DMHS EXEC
       捕获逻辑日志                  接收并执行

三、实验环境

项目 源端 目标端
操作系统 CentOS 7 x86_64 CentOS 7 x86_64
数据库版本 DM8 DM8
数据库角色 源数据库 目标数据库
数据库地址 192.168.64.2 192.168.64.3
数据库端口 5236 5236
DMHS 管理端口 5345 5345
DMHS 数据端口 5346 5346
DMHS 安装目录 /home/dmdba/dmhs /home/dmdba/dmhs
配置文件 /home/dmdba/dmhs/bin/dmhs.hs /home/dmdba/dmhs/bin/dmhs.hs
同步用户 APP APP

四、部署前检查

4.1 检查操作系统和 CPU 架构

cat /etc/centos-release uname -m

确认源端、目标端的操作系统、CPU 架构与 DMHS 安装包匹配。

4.2 检查数据库端口

在源端和目标端分别确认数据库已启动并监听 5236 端口:

ss -lntp | grep 5236

五、安装 DMHS

两端均使用数据库运行用户安装 DMHS。示例:

su - dmdba chmod +x dmhs_xxx.bin ./dmhs_V4.3.42_dm8_rev218429_rh6_64_20260410_sp2.bin -i

安装信息:

[dmdba@localhost dmhs]$ ./dmhs_V4.3.42_dm8_rev218429_rh6_64_20260410_sp2.bin -i Extract install files......... 1.英文(English) 2.简体中文(简体中文) 请选择安装语言[2.简体中文(简体中文)]: /tmp/DMHSInstall/install.log 1.免费试用达梦数据实时同步 2.使用已申请的Key文件 验证许可证文件[1.免费试用达梦数据实时同步]:2 Key文件路径:/home/dmdba/dmhs-2026.12.25.key Key文件限制信息如下: 有效日期:2026-12-25 用户名称:达梦公司产品试用 服务器颁布类型:试用版 发布类型:企业版 Key类型:企业版 授权用户数:无限制 并发连接数:无限制 1.精简版 2.完整版(web客户端) 3.自定义 安装类型[1.精简版]: 1.实时同步软件服务器 2.远程部署工具 3.实时同步软件配置助手 4.手册 所需磁盘空间:485 MB 安装目录: [/home/dmdba/dmhs] 1.统一部署 2.现在初始化 是否初始化达梦数据实时同步系统[1.统一部署]: 正在安装 default start ... default finished. server start ... server finished. hs_agent start ... hs_agent finished. hsca start ... hsca finished. doc start ... doc finished. postinstall start ... postinstall finished. 正在创建快捷方式 安装成功 远程部署工具配置 远程部署工具名称[HsAgent]: 主机Ip(外网)[192.168.64.2](192.168.64.2): 远程部署工具管理端口[5456](1000-65535): 内置数据库轮询间隔[3](1-60): 内置数据库IP[]:192.168.64.2 内置数据库端口[15236](1000-65535): 内置数据库用户名[SYSDBA]: 内置数据库密码[SYSDBA]: 服务脚本环境变量设置 依赖库路径 提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。 请配置依赖库路径:/home/dmdba/dmhs 远程控制服务 1.自动 2.手动 启动方式:[2.手动] 正在创建远程控制服务 达梦数据实时同步V4.0安装完成 更多安装信息,请查看安装日志文件: /home/dmdba/dmhs/log/install.log

六、配置环境变量

编辑 dmdba 用户环境变量文件:

vi ~/.bash_profile

增加以下内容:

export DMHS_HOME=/home/dmdba/dmhs export PATH=$DMHS_HOME/bin:$PATH export LD_LIBRARY_PATH=$DMHS_HOME/bin:$DM_HOME/bin:$LD_LIBRARY_PATH

使配置立即生效:

source ~/.bash_profile

七、配置源端 DM8

7.1 检查归档模式

在源端使用具有相应权限的数据库账号执行:

SELECT ARCH_MODE FROM V$DATABASE;

7.2 检查并开启逻辑追加日志

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

开启逻辑追加日志:

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

7.3 配置 DDL 同步

常见方式包括无触发器方式和触发器方式,本文实验采用触发器方式。

执行 DMHS 安装目录中的脚本:

SET DEFINE OFF; START /home/dmdba/dmhs/scripts/ddl_sql_dm8.sql

也可以使用 DM 管理工具执行该脚本。

执行完成后,检查 DMHS 相关表和触发器:

SQL> SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'SYSDBA' AND TABLE_NAME LIKE 'DMHS_%'; 行号 OWNER TABLE_NAME ---------- ------ ---------------- 1 SYSDBA DMHS_DDL_COL 2 SYSDBA DMHS_DDL_SQL 3 SYSDBA DMHS_DDL_CONS 4 SYSDBA DMHS_DDL_IDX 5 SYSDBA DMHS_DDL_RENAME 6 SYSDBA DMHS_DDL_SEQ 7 SYSDBA DMHS_DDL_PART 8 SYSDBA DMHS_DDL_COMMENT 9 SYSDBA DMHS_DDL_LOG 9 rows got 已用时间: 326.986(毫秒). 执行号:69219. SQL> SELECT OWNER, TRIGGER_NAME FROM DBA_TRIGGERS WHERE OWNER = 'SYSDBA' AND TRIGGER_NAME LIKE 'DMHS_%'; 行号 OWNER TRIGGER_NAME ---------- ------ ----------------------- 1 SYSDBA DMHS_DDL_TRIGGER_AFTER 2 SYSDBA DMHS_DDL_TRIGGER_BEFORE 3 SYSDBA DMHS_DDL_TRIGGER_GRANT 4 SYSDBA DMHS_DDL_TRIGGER_REVOKE 已用时间: 271.824(毫秒). 执行号:69220.

八、配置依赖动态库

DMHS 运行时可能需要 DM8 OCI、加密库或其他依赖库。具体依赖以当前 DMHS 版本和启动日志为准。

先检查动态库依赖:

ldd /home/dmdba/dmhs/bin/dmhs_server | grep 'not found'

从stat目录复制动态库:

cp /home/dmdba/dmhs/bin/stat/libdmoci.so /home/dmdba/dmhs/bin/

九、创建同步用户

源端和目标端创建同名表空间及同步用户。以下示例仅用于实验环境:

CREATE TABLESPACE TEST DATAFILE 'APP.DBF' SIZE 256; CREATE USER APP IDENTIFIED BY "QWEasd@123"; GRANT DBA TO APP;

源端使用同步用户创建测试表:

CREATE TABLE TEST1 ( A INT PRIMARY KEY, B VARCHAR(100) ); INSERT INTO TEST1 VALUES (1, 'test1'); COMMIT;

十、配置目标端 DMHS

编辑目标端配置文件:

vi /home/dmdba/dmhs/bin/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.64.3</db_server> <db_user>APP</db_user> <db_pwd>QWEasd@123</db_pwd> <db_port>5236</db_port> <exec_thr>4</exec_thr> </exec> </dmhs>

参数说明:

参数 说明
siteid DMHS 站点编号,同一同步系统中应保持唯一
mgr_port DMHS 管理端口
data_port DMHS 数据接收端口
db_server 目标数据库地址
db_user 目标端同步用户
exec_thr EXEC 执行线程数,需要结合资源情况设置

十一、配置源端 DMHS

编辑源端配置文件:

vi /home/dmdba/dmhs/bin/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.64.2</db_server> <db_user>APP</db_user> <db_pwd>QWEasd@123</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.64.3</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 用于配置源端对象到目标端对象的映射关系;
  • ddl_mask 用于配置 DDL 同步对象范围。

十二、启动目标端 dmhs 服务

根据实际安装目录修改服务脚本中的环境变量:

cd /home/dmdba/dmhs/bin/service_template vi DmhsService

修改以下内容:

DMHS_HOME=/home/dmdba/dmhs PROG_DIR=/home/dmdba/dmhs/bin CONF_PATH=/home/dmdba/dmhs/bin/dmhs.hs NEED_LIB_PATH=/home/dmdba/dmhs/bin HS_NLS_LANG="GB18030"

启动 DMHS 服务:

cd /home/dmdba/dmhs/bin/service_template ./DmhsService start

检查日志:

tail -100 /home/dmdba/dmhs/log/dmhs_*.log

回到 bin 目录并启动控制台:

cd /home/dmdba/dmhs/bin ./dmhs_console

启动 EXEC 模块:

start exec

十三、启动源端 HS 服务

启动源端 DMHS 服务:

./DmhsService start

启动控制台:

cd /home/dmdba/dmhs/bin ./dmhs_console

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

clear exec lsn

执行全量同步:

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

开启增量同步:

start cpt

十四、验证同步

源端使用 APP 用户创建表并插入数据:

CREATE TABLE TEST2(A INT primary key,b VARCHAR); INSERT INTO TEST2 VALUES (1,'test2'); INSERT INTO TEST1 VALUES (2,'test1'); COMMIT;

目标端使用 APP 用户查询:

SQL> select * from test1 2 ; 行号 A B ---------- ----------- ----- 1 1 test1 2 2 test1 已用时间: 44.024(毫秒). 执行号:3101. SQL> select * from test2; 行号 A B ---------- ----------- ----- 1 1 test2 已用时间: 19.427(毫秒). 执行号:3102.
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服