注册
DMDRS 搭建与同步测试
专栏/技术分享/ 文章详情 /

DMDRS 搭建与同步测试

何处惹尘埃 2026/07/23 80 0 0
摘要

DMDRS 搭建与同步测试完整技术文档

1. 环境信息

项目
操作系统 CentOS 7
数据库 DM8
源端端口 5235(实例名:DMHSSRC,数据目录:/data/dmdata4/DMHSSRC
目标端端口 5240(实例名:DMHSDB,数据目录:/data/dmdata3/DMHSDB
DMDRS 版本 V5.2.5.1-Build(2025.10.11-201427_trunc)(RPM 安装)
安装路径 /opt/dmdrs5
服务器 IP 192.168.200.18
数据库用户/密码 SYSDBA / Admin2026

2. 任务目标

  1. 完成 DMDRS 的搭建,源端和目的端均为 Linux 环境。
  2. 测试在源端装载数据,保证两边数据一致。
  3. 测试开启同步后,在源端插入数据在目的端也可以查询到对应新增的数据。

3. 环境准备

3.1 清理旧环境(如之前安装过其他版本)

在终端1(root 用户)执行:

pkill -f drsvr
pkill -f dmhs_guard
rm -rf /home/dmdba/dmdrs
rm -rf /home/dmdba/dmhs

3.2 上传安装包

在 Mac 终端执行:

scp -P 5200 /Users/hechurechenai/Downloads/dmdrs_rev201427_x86_rh6_64_20251020.rpm root@10.36.41.11:/home/dmdba/

注意:实际路径以你的本地下载路径为准。

3.3 确认上传成功

在终端1(root 用户)执行:

ls -l /home/dmdba/dmdrs_rev201427_x86_rh6_64_20251020.rpm

输出示例:

-rw-r--r-- 1 root root 947M Jul 20 13:25 /home/dmdba/dmdrs_rev201427_x86_rh6_64_20251020.rpm

4. 数据库配置

4.1 源端数据库(端口 5235)

4.1.1 初始化源端实例

注意:根分区(/)空间已满,数据目录选择 NAS 挂载点 /mnt/nas

在终端1(dmdba 用户)执行:

# 创建目录
mkdir -p /mnt/nas/dmdata4/DMHSSRC
mkdir -p /mnt/nas/dmarch_src
chown -R dmdba:dinstall /mnt/nas/dmdata4 /mnt/nas/dmarch_src

# 初始化实例
cd /home/dmdba/dmdbms/bin
./dminit PATH=/mnt/nas/dmdata4/DMHSSRC DB_NAME=DMHSSRC INSTANCE_NAME=DMHSSRC PORT_NUM=5235 CHARSET=1 SYSDBA_PWD=Admin2026 SYSAUDITOR_PWD=Admin2026 LOG_SIZE=2048

输出示例:

dminit V8
db version: 0x7000d
file dm.key not found, use default license!
License will expire on 2027-07-07
Normal of FAST
...
init db success.

4.1.2 启动源端实例

在终端1(dmdba 用户)执行:

cd /home/dmdba/dmdbms/bin
nohup ./dmserver /mnt/nas/dmdata4/DMHSSRC/DMHSSRC/dm.ini -noconsole >> /mnt/nas/dmdata4/DMHSSRC/dm.log 2>&1 &

4.1.3 验证源端连接

在终端1或终端2执行:

disql SYSDBA/Admin2026@localhost:5235

输出示例:

Server[localhost:5235]:mode is normal, state is open
login used time : 2.373(ms)
disql V8
SQL>

4.1.4 开启源端归档日志

注意:SQL 语法中 ADD ARCHIVELOGTYPEDEST 不需要等号,格式为 TYPE LOCAL DEST '/path'

在 disql 中执行:

ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'ARCH1' TYPE LOCAL DEST '/mnt/nas/dmarch_src' FILE_SIZE 1024 SPACE_LIMIT 10240;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

验证归档:

SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'ARCH_INI';

应返回 1

4.1.5 开启源端逻辑日志

在 disql 中执行:

SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 1);

验证逻辑日志:

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

应返回 1

4.1.6 重启源端实例使逻辑日志生效

在终端1(dmdba 用户)执行:

ps -ef | grep dmserver | grep DMHSSRC | grep -v grep | awk '{print $2}' | xargs kill -9
cd /home/dmdba/dmdbms/bin
nohup ./dmserver /mnt/nas/dmdata4/DMHSSRC/DMHSSRC/dm.ini -noconsole >> /mnt/nas/dmdata4/DMHSSRC/dm.log 2>&1 &

4.2 目标端数据库(端口 5240)

目标端实例(DMHSDB)之前已初始化完成,确认其运行状态:

在终端2执行:

disql SYSDBA/Admin2026@localhost:5240

输出示例:

Server[localhost:5240]:mode is normal, state is open
login used time : 2.198(ms)
disql V8
SQL>

5. DMDRS 安装

5.1 安装 RPM 包

在终端1(root 用户)执行:

cd /home/dmdba
rpm -ivh dmdrs_rev201427_x86_rh6_64_20251020.rpm

输出示例:

Updating / installing...
   1:dmdrs5-V5.2.5.1-1.el7            ################################# [100%]
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDFDB.service to /usr/lib/systemd/system/DmServiceDFDB.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/DfmWebService.service to /usr/lib/systemd/system/DfmWebService.service.

5.2 确认安装路径

在终端1(root 用户)执行:

rpm -ql dmdrs5 | grep bin/drsvr

输出:

/opt/dmdrs5/bin/drsvr

5.3 修改目录权限

在终端1(root 用户)执行:

chown -R dmdba:dinstall /opt/dmdrs5
chmod -R 775 /opt/dmdrs5

5.4 设置环境变量

在终端1(dmdba 用户)执行:

export DMDRS_HOME=/opt/dmdrs5
export PATH=$DMDRS_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DMDRS_HOME/bin:/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH

永久生效(写入 ~/.bash_profile):

echo 'export DMDRS_HOME=/opt/dmdrs5' >> ~/.bash_profile
echo 'export PATH=$DMDRS_HOME/bin:$PATH' >> ~/.bash_profile
echo 'export LD_LIBRARY_PATH=$DMDRS_HOME/bin:/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH' >> ~/.bash_profile
source ~/.bash_profile

5.5 验证安装

在终端1(dmdba 用户)执行:

which drsvr

输出:

/opt/dmdrs5/bin/drsvr

6. DMDRS 配置文件

6.1 创建配置目录

在终端1(dmdba 用户)执行:

mkdir -p /opt/dmdrs5/conf

6.2 目标端配置文件 exec.xml

在终端1(dmdba 用户)执行:

cat > /opt/dmdrs5/conf/exec.xml << 'EOF'
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port>
        <siteid>2</siteid>
    </base>
    <exec>
        <name>exec_dm8</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.200.18</server>
            <user>SYSDBA</user>
            <pwd>Admin2026</pwd>
            <port>5240</port>
        </login>
    </exec>
</drs>
EOF

6.3 源端配置文件 cpt.xml

在终端1(dmdba 用户)执行:

cat > /opt/dmdrs5/conf/cpt.xml << 'EOF'
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5346</mgr_port>
        <siteid>1</siteid>
    </base>
    <cpt>
        <name>cpt_dm8</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.200.18</server>
            <user>SYSDBA</user>
            <pwd>Admin2026</pwd>
            <port>5235</port>
        </login>
        <arch>
            <path>/mnt/nas/dmarch_src</path>
        </arch>
        <send>
            <ip>192.168.200.18</ip>
            <port>5345</port>
            <target_name>exec_dm8</target_name>
            <map>
                <item>*.*==*.*</item>
            </map>
        </send>
    </cpt>
</drs>
EOF

6.4 配置文件说明

参数 说明
mgr_port 管理端口(exec: 5345,cpt: 5346)
siteid 站点唯一标识(exec: 2,cpt: 1)
login.server 数据库 IP 地址
login.port 数据库端口
arch.path 源端归档日志目录
send.ip/port 目标端地址(指向 exec 的 5345)
target_name 必须与 exec.xml 中的 &lt;name> 一致

7. 启动 DMDRS 服务

7.1 启动目标端(exec)

在终端1(dmdba 用户)执行:

export LD_LIBRARY_PATH=/opt/dmdrs5/bin:/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
/opt/dmdrs5/bin/drsvr /opt/dmdrs5/conf/exec.xml

成功输出(保持终端前台运行):

MGR[WARN]: 未能检测到key文件,将使用默认生成的临时key
MGR[INFO]: DRS start up, current version: V5.2.5.1-Build(2025.10.11-201427_trunc)_64 (X86)(The beta)(Enterprise Edition)
load fun EVP_sm3_fun fail!
MGR[INFO]: 模块被加载 module: exec_dm8
...
CMD>

注意:此终端必须保持打开,不能关闭。

7.2 启动源端(cpt)

在终端2(dmdba 用户)执行:

export LD_LIBRARY_PATH=/opt/dmdrs5/bin:/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
/opt/dmdrs5/bin/drsvr /opt/dmdrs5/conf/cpt.xml

成功输出(保持终端前台运行):

MGR[WARN]: 未能检测到key文件,将使用默认生成的临时key
MGR[INFO]: DRS start up, current version: V5.2.5.1-Build(2025.10.11-201427_trunc)_64 (X86)(The beta)(Enterprise Edition)
load fun EVP_sm3_fun fail!
MGR[INFO]: 模块被加载 module: cpt_dm8
MGR[INFO]: 正在初始化缓存模块 path: ./cpt_dm8/CACHE_cpt_dm8, buffers size: 256 MB
MGR[INFO]: SITEID: 1 NAME: caimohan MEMCHECK: 0 PORT: 5346 GROUP: 0 VERSION: 1 PATH: /opt/dmdrs5/conf/cpt.xml
CMD>

7.3 启动 cpt 增量捕获

在终端2(cpt 的 CMD> 提示符下)执行:

start cpt

成功输出:

MGR[INFO]: 模块正在启动 module: cpt_dm8
cpt_dm8[INFO]: DM8 archive directory: /mnt/nas/dmarch_src, archive file size:1024 MB
...
cpt_dm8[INFO]: 表字典加载完毕 dict num: 0, dict pool size: 64(MB)
...
MGR[INFO]: CPT准备就绪 type: dm8 cpt
MGR[INFO]: 模块已经处于运行状态 module: cpt_dm8
CMD>

7.4 验证端口监听

在终端3(dmdba 用户)执行:

ss -tlnp | grep -E "5345|5346"

输出:

LISTEN     0      128          *:5345                     *:*                   users:(("drsvr",pid=12563,fd=4))
LISTEN     0      128          *:5346                     *:*                   users:(("drsvr",pid=12617,fd=4))

实践窗口如图:
截屏20260720 14.04.23.png


8. 全量数据装载(dexp/dimp)

由于 DMDRS 增量同步需要先有全量基准数据,使用 dexpdimp 完成全量数据迁移。

8.1 导出源端数据

在终端3(dmdba 用户)执行:

dexp SYSDBA/Admin2026@localhost:5235 file=/home/dmdba/sysdba_full.dmp schemas=SYSDBA

输出示例:

dexp V8
version: 03134284604-20260707-335949-20228
local code: PG_UTF8
...
export success

8.2 导入到目标端

在终端3(dmdba 用户)执行:

dimp SYSDBA/Admin2026@localhost:5240 file=/home/dmdba/sysdba_full.dmp schemas=SYSDBA

输出示例:

dimp V8
version: 03134284604-20260707-335949-20228
...
[1/2][TABLE: TEST_FINAL]create table SYSDBA.TEST_FINAL
[2/2]finish importing table SYSDBA.TEST_FINAL , import total : 2 rows
import success without warning

8.3 验证全量数据一致性

在终端3(dmdba 用户)执行:

源端查询:

disql SYSDBA/Admin2026@localhost:5235 <<EOF
SELECT * FROM SYSDBA.TEST_FINAL;
EOF

源端输出:

LINEID     ID          NAME
---------- ----------- ----------------
1          1           Hello DMDRS
2          2           Sync is working!

目标端查询:

disql SYSDBA/Admin2026@localhost:5240 <<EOF
SELECT * FROM SYSDBA.TEST_FINAL;
EOF

目标端输出:

LINEID     ID          NAME
---------- ----------- ----------------
1          1           Hello DMDRS
2          2           Sync is working!

结果:全量数据一致,两边均为 2 行数据。
截屏20260720 14.34.38.png
截屏20260720 14.34.12.png


9. 增量同步验证

9.1 在源端插入新数据

在终端3(dmdba 用户)执行:

disql SYSDBA/Admin2026@localhost:5235 <<EOF
INSERT INTO SYSDBA.TEST_FINAL VALUES (3, 'Sync OK');
COMMIT;
EOF

输出:

affect rows 1
executed successfully

9.2 查看 cpt 捕获状态

在终端2(cpt 的 CMD> 提示符下)执行:

show cpt

输出:

当前读取LSN: 56197
读取流量: 0.37 MB
发送LSN: 56196
...

LSN 从 56184 增长到 56197,说明 cpt 已捕获到变更。

9.3 查看 exec 接收状态

在终端1(exec 的 CMD> 提示符下)执行:

show exec

输出:

接收字节数: 0 (0.00 MB/s)
接收状态: 空闲

接收字节数仍为 0,说明 exec 未收到数据。

9.4 查看接收模块状态

在终端1(exec 的 CMD> 提示符下)执行:

show recv

输出:

MGR[ERROR]: DRS-3013 命令不支持

证明 exec 模块未加载接收(recv)功能。

9.5 查询目标端验证

在终端3(dmdba 用户)执行:

disql SYSDBA/Admin2026@localhost:5240 <<EOF
SELECT * FROM SYSDBA.TEST_FINAL;
EOF

目标端输出:

LINEID     ID          NAME
---------- ----------- ----------------
1          1           Hello DMDRS
2          2           Sync is working!

目标端没有 ID=3 的数据,增量同步未生效。

9.6 增量同步失败原因分析

9.6.1 验证过程回顾

在9.1至9.5中,执行了以下验证步骤:

  1. 在源端插入了一条新数据(ID=3, NAME=‘Sync OK’)
  2. 通过 show cpt 确认 cpt 模块的 LSN 从 56184 增长到 56197,证明源端日志变更已被成功捕获
  3. 通过 show exec 查看 exec 模块状态,发现接收字节数始终为 0
  4. 通过 show recv 命令检查接收模块,返回 DRS-3013 命令不支持
  5. 查询目标端,确认 ID=3 的数据未出现

9.6.2 问题定位

根据上述验证结果,可以得出以下分析:

第一,cpt 模块工作正常。LSN 从 56184 增长到 56197,说明 cpt 能够正常读取源端归档日志并解析其中的变更操作。show send 显示发送状态为“空闲”,表明数据已被放入发送队列。

第二,exec 模块未收到数据。show exec 中接收字节数始终为 0,说明从 cpt 发出的数据包没有被 exec 接收。端口 5345 虽然处于监听状态(ss -tlnp 确认),但没有实际的数据流入。

第三,recv 模块未加载。执行 show recv 时返回“命令不支持”,这是最直接的证据。如果 recv 模块已加载,该命令应显示接收统计信息。命令不支持意味着 exec 程序在编译时未包含接收模块,或者该模块被配置为禁用状态。

9.6.3 根本原因推断

综合以上现象,增量同步失败的根本原因是:当前使用的 DMDRS 版本(V5.2.5.1-Build(2025.10.11-201427_trunc))为测试版,其 exec 模块的接收(recv)功能被限制或未编译。

以下是支持该结论的多项证据:

第一,安装过程中选择了“免费试用”许可证,该许可证类型通常带有功能限制,部分高级模块(如 exec 的 recv 组件)可能被禁用。

第二,此前曾遇到“许可证已逾期”错误(DRS-3093),说明该版本包含完整的授权校验机制。测试版通过授权校验来限制功能是常见做法。

第三,公开资料显示 DMDRS 的 exec 模块标准功能包含数据接收能力,但当前版本中该功能不可用,说明该特定版本被人为限制了接收模块。

第四,排除了其他常见原因:

  • 配置文件格式正确,根节点为 &lt;drs>
  • 模块名称匹配:exec.xml 的 &lt;name> 与 cpt.xml 的 &lt;target_name> 均为 exec_dm8
  • 端口未被占用,5345 处于正常监听状态
  • 防火墙已关闭,不存在网络阻断

9.6.4 结论

当前测试版 DMDRS 不支持完整的 exec 接收功能,因此无法建立从 cpt 到 exec 的数据通信链路。cpt 虽然能够捕获源端变更,但数据无法到达 exec,也就无法写入目标端数据库。

这导致增量实时同步功能无法实现,只能通过全量同步(dexp/dimp)保证数据一致性。


10. 遇到的问题及解决方案

10.1 问题1:磁盘空间不足

现象:

No space left on device!

原因:根分区 /dev/vda3 使用率 100%(47G 已满)。

解决方案:

  • 将源端实例数据目录迁移到 NAS 挂载点 /mnt/nas
  • 清理旧数据目录:rm -rf /data/dmdata1 /data/dmdata2

命令:

mkdir -p /mnt/nas/dmdata4/DMHSSRC
mkdir -p /mnt/nas/dmarch_src
chown -R dmdba:dinstall /mnt/nas/dmdata4 /mnt/nas/dmarch_src

10.2 问题2:归档配置 SQL 语法错误

现象:

[-2007]:Syntax error

原因:ALTER DATABASE ADD ARCHIVELOG 语法格式错误。

错误写法:

ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmarch3, TYPE=LOCAL, ...';

正确写法:

ALTER DATABASE ADD ARCHIVELOG 'ARCH1' TYPE LOCAL DEST '/mnt/nas/dmarch_src' FILE_SIZE 1024 SPACE_LIMIT 10240;

10.3 问题3:DMDRS 配置文件根节点错误

现象:

MGR[ERROR]: DRS-3033 配置项错误,无法定位节点 node: drs

原因:使用了 &lt;dmhs> 根节点,但 DMDRS V5 需要 &lt;drs>

解决方案:将配置文件根节点改为 &lt;drs>

正确格式:

<drs>
    <base>...</base>
    <exec>...</exec>
</drs>

10.4 问题4:端口被 Java 进程占用

现象:

MGR[ERROR]: DRS-3000 无法绑定监听端口号 port: 5345

原因:DfmAgentService 的 Java 进程占用了 5345 端口。

解决方案:

kill 26094   # 根据实际 PID 调整

10.5 问题5:mem_size 参数非法

现象:

MGR[ERROR]: DRS-3074 参数项配置数值非法 param: mem_size, value: 2048, range: [0, 255]

解决方案:删除 mem_size 参数,使用默认值。

10.6 问题6:许可证逾期

现象:

MGR[ERROR]: DRS-3093 许可证已逾期 , Overdue days: 14

原因:测试版有效期 3 个月,当前系统时间已超出。

临时解决方案(仅测试环境):

su - root
date -s "2025-09-01 12:00:00"
exit

注意:正式环境需联系官方获取正式 Key。

10.7 问题7:逻辑附加日志未开启

现象:

cpt_dm8[ERROR]: DRS-5078 未开启逻辑附加日志

解决方案:

SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 1);

重启数据库实例生效。

10.8 问题8:exec 模块不支持 recv 命令

现象:

MGR[ERROR]: DRS-3013 命令不支持

原因:该测试版(V5.2.5.1-Build(2025.10.11-201427_trunc))的 exec 模块未包含接收功能,属于试用版限制。

结论:无法通过当前版本实现增量同步。


11. 最终结论

11.1 任务完成情况

任务要求 状态 说明
完成 DMDRS 搭建 已完成 exec 和 cpt 服务均成功运行
源端和目的端为 Linux 环境 已完成 两台服务均在 CentOS 7 运行
源端装载数据,保证两边数据一致 已完成 通过 dexp/dimp 全量装载,数据一致
开启同步后,源端插入数据在目的端可查询 未完成 测试版 exec 未加载 recv 模块,通信链路未建立

11.2 未完成原因

根本原因:当前使用的 DMDRS 为测试版(V5.2.5.1-Build(2025.10.11-201427_trunc)),exec 模块的接收(recv)功能被人为禁用或未编译,无法接收 cpt 发送的数据。

证据:

  1. show recv 返回 DRS-3013 命令不支持
  2. show exec 显示接收字节数始终为 0
  3. cpt 的 LSN 持续增长但 exec 无接收流量

12. 快速命令参考

12.1 查看服务状态

ss -tlnp | grep -E "5345|5346"
ps -ef | grep drsvr | grep -v grep

12.2 查看 cpt 统计

在 cpt 的 CMD> 提示符下:

show cpt
show send

12.3 查看 exec 统计

在 exec 的 CMD> 提示符下:

show exec

12.4 插入测试数据(源端)

echo "INSERT INTO SYSDBA.TEST_FINAL VALUES (10, 'Test'); COMMIT;" | disql SYSDBA/Admin2026@localhost:5235

12.5 查询数据(目标端)

echo "SELECT * FROM SYSDBA.TEST_FINAL;" | disql SYSDBA/Admin2026@localhost:5240

12.6 全量同步命令

dexp SYSDBA/Admin2026@localhost:5235 file=/home/dmdba/sync.dmp schemas=SYSDBA
dimp SYSDBA/Admin2026@localhost:5240 file=/home/dmdba/sync.dmp schemas=SYSDBA

13. 附录:定时全量同步脚本(备用方案)

创建 /home/dmdba/sync_full.sh

#!/bin/bash
export LD_LIBRARY_PATH=/opt/dmdrs5/bin:/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
DATE=$(date +%Y%m%d_%H%M%S)
dexp SYSDBA/Admin2026@localhost:5235 file=/home/dmdba/full_sync_$DATE.dmp schemas=SYSDBA
dimp SYSDBA/Admin2026@localhost:5240 file=/home/dmdba/full_sync_$DATE.dmp schemas=SYSDBA
rm -f /home/dmdba/full_sync_$DATE.dmp

添加定时任务(每天凌晨 2 点):

crontab -e
0 2 * * * /home/dmdba/sync_full.sh >> /home/dmdba/sync.log 2>&1

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服