| 项目 | 值 |
|---|---|
| 操作系统 | 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 |
在终端1(root 用户)执行:
pkill -f drsvr
pkill -f dmhs_guard
rm -rf /home/dmdba/dmdrs
rm -rf /home/dmdba/dmhs
在 Mac 终端执行:
scp -P 5200 /Users/hechurechenai/Downloads/dmdrs_rev201427_x86_rh6_64_20251020.rpm root@10.36.41.11:/home/dmdba/
注意:实际路径以你的本地下载路径为准。
在终端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
注意:根分区(
/)空间已满,数据目录选择 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.
在终端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 &
在终端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>
注意:SQL 语法中
ADD ARCHIVELOG的TYPE和DEST不需要等号,格式为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。
在 disql 中执行:
SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 1);
验证逻辑日志:
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
应返回 1。
在终端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 &
目标端实例(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>
在终端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.
在终端1(root 用户)执行:
rpm -ql dmdrs5 | grep bin/drsvr
输出:
/opt/dmdrs5/bin/drsvr
在终端1(root 用户)执行:
chown -R dmdba:dinstall /opt/dmdrs5
chmod -R 775 /opt/dmdrs5
在终端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
在终端1(dmdba 用户)执行:
which drsvr
输出:
/opt/dmdrs5/bin/drsvr
在终端1(dmdba 用户)执行:
mkdir -p /opt/dmdrs5/conf
在终端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
在终端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
| 参数 | 说明 |
|---|---|
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 中的 <name> 一致 |
在终端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>
注意:此终端必须保持打开,不能关闭。
在终端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>
在终端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>
在终端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))
实践窗口如图:
由于 DMDRS 增量同步需要先有全量基准数据,使用 dexp 和 dimp 完成全量数据迁移。
在终端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
在终端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
在终端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 行数据。
在终端3(dmdba 用户)执行:
disql SYSDBA/Admin2026@localhost:5235 <<EOF
INSERT INTO SYSDBA.TEST_FINAL VALUES (3, 'Sync OK');
COMMIT;
EOF
输出:
affect rows 1
executed successfully
在终端2(cpt 的 CMD> 提示符下)执行:
show cpt
输出:
当前读取LSN: 56197
读取流量: 0.37 MB
发送LSN: 56196
...
LSN 从 56184 增长到 56197,说明 cpt 已捕获到变更。
在终端1(exec 的 CMD> 提示符下)执行:
show exec
输出:
接收字节数: 0 (0.00 MB/s)
接收状态: 空闲
接收字节数仍为 0,说明 exec 未收到数据。
在终端1(exec 的 CMD> 提示符下)执行:
show recv
输出:
MGR[ERROR]: DRS-3013 命令不支持
证明 exec 模块未加载接收(recv)功能。
在终端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.1至9.5中,执行了以下验证步骤:
show cpt 确认 cpt 模块的 LSN 从 56184 增长到 56197,证明源端日志变更已被成功捕获show exec 查看 exec 模块状态,发现接收字节数始终为 0show recv 命令检查接收模块,返回 DRS-3013 命令不支持根据上述验证结果,可以得出以下分析:
第一,cpt 模块工作正常。LSN 从 56184 增长到 56197,说明 cpt 能够正常读取源端归档日志并解析其中的变更操作。show send 显示发送状态为“空闲”,表明数据已被放入发送队列。
第二,exec 模块未收到数据。show exec 中接收字节数始终为 0,说明从 cpt 发出的数据包没有被 exec 接收。端口 5345 虽然处于监听状态(ss -tlnp 确认),但没有实际的数据流入。
第三,recv 模块未加载。执行 show recv 时返回“命令不支持”,这是最直接的证据。如果 recv 模块已加载,该命令应显示接收统计信息。命令不支持意味着 exec 程序在编译时未包含接收模块,或者该模块被配置为禁用状态。
综合以上现象,增量同步失败的根本原因是:当前使用的 DMDRS 版本(V5.2.5.1-Build(2025.10.11-201427_trunc))为测试版,其 exec 模块的接收(recv)功能被限制或未编译。
以下是支持该结论的多项证据:
第一,安装过程中选择了“免费试用”许可证,该许可证类型通常带有功能限制,部分高级模块(如 exec 的 recv 组件)可能被禁用。
第二,此前曾遇到“许可证已逾期”错误(DRS-3093),说明该版本包含完整的授权校验机制。测试版通过授权校验来限制功能是常见做法。
第三,公开资料显示 DMDRS 的 exec 模块标准功能包含数据接收能力,但当前版本中该功能不可用,说明该特定版本被人为限制了接收模块。
第四,排除了其他常见原因:
<drs><name> 与 cpt.xml 的 <target_name> 均为 exec_dm8当前测试版 DMDRS 不支持完整的 exec 接收功能,因此无法建立从 cpt 到 exec 的数据通信链路。cpt 虽然能够捕获源端变更,但数据无法到达 exec,也就无法写入目标端数据库。
这导致增量实时同步功能无法实现,只能通过全量同步(dexp/dimp)保证数据一致性。
现象:
No space left on device!
原因:根分区 /dev/vda3 使用率 100%(47G 已满)。
解决方案:
/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
现象:
[-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;
现象:
MGR[ERROR]: DRS-3033 配置项错误,无法定位节点 node: drs
原因:使用了 <dmhs> 根节点,但 DMDRS V5 需要 <drs>。
解决方案:将配置文件根节点改为 <drs>。
正确格式:
<drs>
<base>...</base>
<exec>...</exec>
</drs>
现象:
MGR[ERROR]: DRS-3000 无法绑定监听端口号 port: 5345
原因:DfmAgentService 的 Java 进程占用了 5345 端口。
解决方案:
kill 26094 # 根据实际 PID 调整
现象:
MGR[ERROR]: DRS-3074 参数项配置数值非法 param: mem_size, value: 2048, range: [0, 255]
解决方案:删除 mem_size 参数,使用默认值。
现象:
MGR[ERROR]: DRS-3093 许可证已逾期 , Overdue days: 14
原因:测试版有效期 3 个月,当前系统时间已超出。
临时解决方案(仅测试环境):
su - root
date -s "2025-09-01 12:00:00"
exit
注意:正式环境需联系官方获取正式 Key。
现象:
cpt_dm8[ERROR]: DRS-5078 未开启逻辑附加日志
解决方案:
SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 1);
重启数据库实例生效。
现象:
MGR[ERROR]: DRS-3013 命令不支持
原因:该测试版(V5.2.5.1-Build(2025.10.11-201427_trunc))的 exec 模块未包含接收功能,属于试用版限制。
结论:无法通过当前版本实现增量同步。
| 任务要求 | 状态 | 说明 |
|---|---|---|
| 完成 DMDRS 搭建 | 已完成 | exec 和 cpt 服务均成功运行 |
| 源端和目的端为 Linux 环境 | 已完成 | 两台服务均在 CentOS 7 运行 |
| 源端装载数据,保证两边数据一致 | 已完成 | 通过 dexp/dimp 全量装载,数据一致 |
| 开启同步后,源端插入数据在目的端可查询 | 未完成 | 测试版 exec 未加载 recv 模块,通信链路未建立 |
根本原因:当前使用的 DMDRS 为测试版(V5.2.5.1-Build(2025.10.11-201427_trunc)),exec 模块的接收(recv)功能被人为禁用或未编译,无法接收 cpt 发送的数据。
证据:
show recv 返回 DRS-3013 命令不支持show exec 显示接收字节数始终为 0cpt 的 LSN 持续增长但 exec 无接收流量ss -tlnp | grep -E "5345|5346"
ps -ef | grep drsvr | grep -v grep
在 cpt 的 CMD> 提示符下:
show cpt
show send
在 exec 的 CMD> 提示符下:
show exec
echo "INSERT INTO SYSDBA.TEST_FINAL VALUES (10, 'Test'); COMMIT;" | disql SYSDBA/Admin2026@localhost:5235
echo "SELECT * FROM SYSDBA.TEST_FINAL;" | disql SYSDBA/Admin2026@localhost:5240
dexp SYSDBA/Admin2026@localhost:5235 file=/home/dmdba/sync.dmp schemas=SYSDBA
dimp SYSDBA/Admin2026@localhost:5240 file=/home/dmdba/sync.dmp schemas=SYSDBA
创建 /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
文章
阅读量
获赞
