注册
DRS 完整配置步骤与过程
专栏/技术分享/ 文章详情 /

DRS 完整配置步骤与过程

文橘本可 2026/07/23 72 0 0
摘要

1. 环境准备:创建两个独立达梦实例

1.1 清理旧环境(如果存在)

pkill -9 -f dmserver rm -rf /data/dmdata/SOURCE /data/dmdata_STB/TARGET

1.2 初始化源库实例(端口5236)

cd /home/dmdba/dmdbms/bin ./dminit path=/data/dmdata/SOURCE DB_NAME=SRC INSTANCE_NAME=SRC \ PORT_NUM=5236 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 \ SYSDBA_PWD=Wei050210 SYSAUDITOR_PWD=Wei050210

1.3 初始化目标库实例(端口5237)

./dminit path=/data/dmdata_STB/TARGET DB_NAME=TGT INSTANCE_NAME=TGT \ PORT_NUM=5237 PAGE_SIZE=16 CHARSET=0 CASE_SENSITIVE=1 \ SYSDBA_PWD=Wei050210 SYSAUDITOR_PWD=Wei050210

1.4 启动两个实例

nohup ./dmserver /data/dmdata/SOURCE/SRC/dm.ini > /data/dsc_logs/source.log 2>&1 & nohup ./dmserver /data/dmdata_STB/TARGET/TGT/dm.ini > /data/dsc_logs/target.log 2>&1 & sleep 3

1.5 验证实例状态

./disql SYSDBA/Wei050210@192.168.200.208:5236 <<< "SELECT STATUS$ FROM V\$INSTANCE;" ./disql SYSDBA/Wei050210@192.168.201.128:5237 <<< "SELECT STATUS$ FROM V\$INSTANCE;"

均应返回 OPEN
QQ20260720140620.png

2. 源库开启归档和附加日志

2.1 修改 dm.ini 和创建 dmarch.ini

cd /data/dmdata/SOURCE/SRC sed -i 's/ARCH_INI\s*=.*/ARCH_INI = 1/' dm.ini echo 'RLOG_APPEND_LOGIC = 1' >> dm.ini echo 'RLOG_APPEND_SYSTAB_LOGIC = 1' >> dm.ini cat > dmarch.ini <<EOF [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dmdata/SOURCE/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 EOF mkdir -p /data/dmdata/SOURCE/arch chown -R dmdba:dinstall /data/dmdata/SOURCE/arch

2.2 重启源库使配置生效

cd /home/dmdba/dmdbms/bin ./disql SYSDBA/Wei050210@192.168.200.208:5236 <<< "SHUTDOWN IMMEDIATE;" nohup ./dmserver /data/dmdata/SOURCE/SRC/dm.ini > /data/dsc_logs/source.log 2>&1 & sleep 3

2.3 验证归档和附加日志

./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF SELECT ARCH_MODE FROM V\$DATABASE; SELECT VALUE FROM V\$PARAMETER WHERE NAME='RLOG_APPEND_LOGIC'; EOF

返回 Y1 即成功。


3. 源库创建测试表并插入初始数据

./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF CREATE TABLE DRS_TEST ( ID INT PRIMARY KEY, INFO VARCHAR(100), CTIME TIMESTAMP DEFAULT SYSDATE ); INSERT INTO DRS_TEST(ID, INFO) VALUES(1, 'Initial row'); INSERT INTO DRS_TEST(ID, INFO) VALUES(2, 'Second row'); COMMIT; EOF

4. 安装 DMDRS

4.1 上传安装包和 key 文件

# 将安装包 dmdrs_rev218265_x86_rh6_64_20260409.bin 放在 /opt 下 # 将 key 文件 dmdrs9101901178.key 传到 /home/dmdba/dmdrs.key chown dmdba:dinstall /home/dmdba/dmdrs.key chmod 644 /home/dmdba/dmdrs.key

4.2 创建安装目录

sudo mkdir -p /data/dmdrs5 sudo chown dmdba:dinstall -R /data/dmdrs5 sudo chmod -R 755 /data/dmdrs5

4.3 执行安装(dmdba 用户)

cd /opt ./dmdrs_rev218265_x86_rh6_64_20260409.bin -i

交互式选项(按顺序输入):

  • 语言:C (中文)
  • 安装目录:/data/dmdrs5
  • 组件:1 2 (管理平台 + 代理)
  • 许可证:2 (使用许可证文件),路径:/home/dmdba/dmdrs.key
  • 数据库驱动路径:/home/dmdba/dmdbms/bin
  • 代理 IP:192.168.201.128
  • 代理端口:19345
  • 管理平台端口:8080
  • 使用外置库:1
    • IP:192.168.200.208
    • 端口:5236
    • 用户:SYSDBA
    • 密码:Wei050210
  • 是否注册系统服务:1 (是)
  • 提示执行 root 脚本时,新开终端执行:
    sudo /data/dmdrs5/scripts/root/root_installer.sh
  • 回到安装界面,输入 Y 完成安装。
    QQ20260720140634.png

4.4 确认服务启动

ps -ef | grep -E 'dfm-admin|dfm-agent' | grep -v grep

QQ20260720142458.png

5. 登录管理平台并配置数据源

5.1 访问管理平台

通过 SSH 隧道或直接访问:http://192.168.200.208:8080/dmdfm
默认用户名:admin,密码:安装时设置的密码。
QQ20260720142646.png

5.2 新建源数据源 source

数据源管理 中点击 新增

  • 数据源名称:source
  • 数据库厂商:DM
  • 数据库版本:DM8
  • 服务连接 IP:192.168.200.208
  • 端口号:5236
  • 用户名:SYSDBA
  • 密码:Wei050210
  • 点击 测试连接,通过后保存。
    QQ20260720143220.png

5.3 新建目标数据源 target

  • 数据源名称:target
  • 服务连接 IP:192.168.201.128
  • 端口号:5237
  • 用户名:SYSDBA
  • 密码:Wei050210
  • 测试连接通过后保存。
    QQ20260720152834.png

6. 创建同步任务

6.1 新建任务

进入 同步管理 → 同步任务新建任务

6.2 选择源和目标数据源

  • 源数据源:source
  • 目标数据源:target

6.3 配置源 DRS 服务

  • 服务名称:instance1
  • 代理:选择已注册的代理 (192.168.201.128:19345)
  • 服务地址:192.168.200.208
  • 端口号:5345
  • 站点号:1
  • DMDRS_HOME 目录:/data/dmdrs5/bin
  • 不开启主备,不启用 EIP

6.4 配置目标 DRS 服务

  • 服务名称:instance2
  • 代理:同上
  • 服务地址:192.168.201.128
  • 端口号:5346
  • 站点号:2
  • DMDRS_HOME 目录:/data/dmdrs5/bin

6.5 选择同步对象

勾选 SYSDBA.DRS_TEST,映射规则保持默认 SYSDBA.*==SYSDBA.*

6.6 设置同步模式

勾选 全量同步增量同步,保存任务。

6.7 启动任务

在任务列表中点击 启动

QQ20260720152915.png

7. 验证同步

7.1 随后点击装载,进行全量装载和增帘同步,检查目标库表和数据(全量验证)

./disql SYSDBA/Wei050210@192.168.201.128:5237 <<EOF SELECT * FROM DRS_TEST; EOF

应看到与源库完全相同的两行数据。

企业微信截图_17846240741265.png

QQ20260721165519.png

7.2 增量同步验证

源库插入新数据:

./disql SYSDBA/Wei050210@192.168.200.208:5236 <<EOF INSERT INTO DRS_TEST(ID, INFO) VALUES(100, 'Incremental test'); COMMIT; EOF

立即在目标库查询:

./disql SYSDBA/Wei050210@192.168.201.128:5237 <<EOF SELECT * FROM DRS_TEST; EOF

能看到新行即代表增量同步成功。
企业微信截图_17846240101402.png


8. 常见问题及解决代码

DMDRS 踩坑总结(基于本次实践)

整个 DRS 部署过程中,遇到了多个典型问题,每个问题背后都有其根本原因和通用解决方案。以下是完整的问题回顾与总结,可作为后续 DRS 实践的标准排错指南。


坑1:目标数据源端口配置错误 → 自己同步到自己

现象

  • 源库和目标库都在运行,DRS 任务启动后,目标库始终为空或出现“违反唯一性约束”错误。
  • 查看目标引擎日志(instance2),发现连接串为 PORT=5236 而非预期的 5237
  • 进一步发现目标库的表结构和数据与源库完全一致(包括主键冲突的报错对象 ID 也与源库相同)。

根本原因
在 DMDFM 管理平台创建目标数据源时,误将端口号填成了 5236(源库端口)。或者只创建了一个数据源并复用在目标和源上。这导致目标 DRS 引擎实际连接的是源库实例,最终将数据装载回源库自身,引发主键冲突。

解决方案

  1. 数据源管理 中,确认 source 数据源端口为 5236target 数据源端口为 5237,并分别测试连接成功。
  2. 如果已生成错误配置,需手动编辑 /data/dmdrs5/INST_DRS/instance2/drs.xml,将 &lt;port>5236&lt;/port> 改为 &lt;port>5237&lt;/port>
  3. 清理缓存并重建任务(见坑4)。
    QQ20260721165458.png
    教训
    数据源配置是 DRS 的基石。 源和目标必须创建两个独立数据源,且端口、IP 必须与对应数据库实例严格一致。每次修改数据源后,建议删除旧任务重建,避免自动生成的 xml 残留错误端口。

坑2:源库未开启归档和附加日志

现象

  • DRS 权限检测提示“未开启归档”、“未开启附加日志”。
  • 任务无法启动或增量同步不工作。

根本原因
达梦 DRS 要求源端数据库必须处于归档模式,并开启逻辑附加日志(RLOG_APPEND_LOGIC=1)。这些参数在数据库初始化时默认关闭,需要手动修改 dm.ini 并重启数据库。

解决方案

# 修改 dm.ini cd /data/dmdata/SOURCE/SRC sed -i 's/ARCH_INI\s*=.*/ARCH_INI = 1/' dm.ini echo 'RLOG_APPEND_LOGIC = 1' >> dm.ini echo 'RLOG_APPEND_SYSTAB_LOGIC = 1' >> dm.ini # 创建 dmarch.ini 并创建归档目录 cat > dmarch.ini <<EOF [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dmdata/SOURCE/arch ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 EOF mkdir -p /data/dmdata/SOURCE/arch chown -R dmdba:dinstall /data/dmdata/SOURCE/arch # 重启源库 cd /home/dmdba/dmdbms/bin ./disql SYSDBA/Wei050210@192.168.200.208:5236 <<< "SHUTDOWN IMMEDIATE;" nohup ./dmserver /data/dmdata/SOURCE/SRC/dm.ini > /data/dsc_logs/source.log 2>&1 &

教训
在 DRS 部署前,务必先执行权限检测,并确保源库归档及附加日志已开启。修改参数后一定要重启数据库才能生效。


坑3:魔数不一致(DB_MAGIC)错误

现象

  • 任务启动报错 DRS-5266 数据库发生改变,DB_MAGIC不一致
  • 发生在重新初始化目标库或恢复备份后。

根本原因
DRS 内部会记录数据库的魔数(DB_MAGIC),一旦发现与记录不一致(例如重建了目标库),便会阻止启动,防止数据错误。

解决方案
删除 DRS 的校验文件 drsvr.ini 和缓存,强制 DRS 重新识别:

sudo systemctl stop DfmAgentService cd /data/dmdrs5/INST_DRS rm -f instance1/link1/drsvr.ini instance2/link1/drsvr.ini rm -rf instance1/link1/DICT instance1/link1/CACHE_link1 rm -rf instance2/link1/DICT instance2/link1/CACHE_link1 sudo systemctl start DfmAgentService

然后在管理平台重启任务。

教训
如果目标库数据被重建或更换,必须清除 DRS 的持久化状态文件(字典、缓存、校验文件),让 DRS 重新加载元数据。


坑4:DICT 字典缓存残留导致装载冲突

现象

  • 任务一直报“目标端表已存在”或“违反唯一性约束”,即使目标库中该表已删除。
  • 日志中出现 DRS-6165 目标端表已存在

根本原因
DRS 在装载过程中会在 INST_DRS/instanceX/link1/DICT 目录下生成表的字典文件(.dct)。如果上次装载失败或中断,这些字典文件会残留,导致 DRS 认为表已装载过,不再重新创建。

解决方案
删除实例的 DICT 和 CACHE 目录:

sudo systemctl stop DfmAgentService cd /data/dmdrs5/INST_DRS rm -rf instance1/link1/DICT instance1/link1/CACHE_link1 rm -rf instance2/link1/DICT instance2/link1/CACHE_link1 sudo systemctl start DfmAgentService

然后重建或重启任务。

教训
每次遇到装载失败或表冲突时,务必清理 DICT 字典缓存。 这是解决装载类报错的最有效手段。清理后建议删除旧任务并新建,确保彻底。


坑5:内存配置过大导致启动警告

现象

  • 日志出现 mem_size参数配置过大,超过系统剩余内存大小
  • DRS 引擎启动缓慢或无法申请足够内存。

根本原因
默认的 mem_size 配置可能为 16G,而虚拟机可用内存往往较小(如本次环境仅 13G 且已占用一部分)。

解决方案
编辑实例的 drs.xml,将 &lt;mem_size> 调整为合理值(如 2048 MB 或 4096 MB):

<mem_size>2048</mem_size>

或通过管理平台高级配置修改。之后重启代理服务。

教训
部署前应评估系统剩余内存,合理配置 DRS 内存参数,避免资源争抢导致服务不稳定。


坑6:SSH 隧道或网络连接问题

现象

  • 管理平台无法从本地浏览器访问(curl 返回 302 但浏览器打不开)。
  • 测试数据源连接失败(端口不通)。

根本原因
虚拟机内网 IP(192.168.x.x)无法直接从外部访问,需要端口转发或 SSH 隧道。

解决方案

  • 使用 SSH 隧道将本地端口映射到虚拟机端口:
    ssh -p 5235 -L 8080:192.168.200.208:8080 root@10.36.41.11
  • 然后浏览器访问 http://localhost:8080/dmdfm
  • 对于数据库连接测试,确保数据源中填写的 IP 是 DRs 代理所在服务器能访问的 IP(本机内网 IP 即可)。

教训
在混合网络环境下,必须明确哪些 IP 是管理平台访问地址,哪些是 DRS 内部通信地址,避免混淆。SSH 隧道是最简单的远程访问方式。


最终成功配置的核心原则

  1. 两个数据源,端口严格区分source→5236,target→5237。
  2. 源库必须开启归档和附加日志,并保持 OPEN。
  3. 装载前清理 DICT 缓存,避免残留字典干扰。
  4. 重建任务比修改配置更彻底,遇到诡异问题果断删除任务新建。
  5. 日志是排错的第一手资料,重点查看 instance2/log/ 中的执行日志,尤其关注 EXEC: 连接串和错误堆栈。

以上所有坑点均已在本项目中复现并解决,可作为 DRS 实施的标准规避手册。今后的 DRS 部署严格遵循以上原则,可大幅减少调试时间。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服