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 |
cat /etc/centos-release uname -m
确认源端、目标端的操作系统、CPU 架构与 DMHS 安装包匹配。
在源端和目标端分别确认数据库已启动并监听 5236 端口:
ss -lntp | grep 5236
两端均使用数据库运行用户安装 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
在源端使用具有相应权限的数据库账号执行:
SELECT ARCH_MODE FROM V$DATABASE;
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);
常见方式包括无触发器方式和触发器方式,本文实验采用触发器方式。
执行 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;
编辑目标端配置文件:
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 执行线程数,需要结合资源情况设置 |
编辑源端配置文件:
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 同步对象范围。根据实际安装目录修改服务脚本中的环境变量:
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
启动源端 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.
文章
阅读量
获赞
