pkill -9 -f dmserver rm -rf /data/dmdata/SOURCE /data/dmdata_STB/TARGET
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
./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
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
./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。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
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
./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
返回 Y 和 1 即成功。
./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
# 将安装包 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
sudo mkdir -p /data/dmdrs5 sudo chown dmdba:dinstall -R /data/dmdrs5 sudo chmod -R 755 /data/dmdrs5
cd /opt
./dmdrs_rev218265_x86_rh6_64_20260409.bin -i
交互式选项(按顺序输入):
C (中文)/data/dmdrs51 2 (管理平台 + 代理)2 (使用许可证文件),路径:/home/dmdba/dmdrs.key/home/dmdba/dmdbms/bin192.168.201.1281934580801
192.168.200.2085236SYSDBAWei0502101 (是)sudo /data/dmdrs5/scripts/root/root_installer.sh
Y 完成安装。ps -ef | grep -E 'dfm-admin|dfm-agent' | grep -v grep
通过 SSH 隧道或直接访问:http://192.168.200.208:8080/dmdfm
默认用户名:admin,密码:安装时设置的密码。
source在 数据源管理 中点击 新增:
sourceDMDM8192.168.200.2085236SYSDBAWei050210targettarget192.168.201.1285237SYSDBAWei050210进入 同步管理 → 同步任务 → 新建任务。
sourcetargetinstance1192.168.200.20853451/data/dmdrs5/bininstance2192.168.201.12853462/data/dmdrs5/bin勾选 SYSDBA.DRS_TEST,映射规则保持默认 SYSDBA.*==SYSDBA.*。
勾选 全量同步 和 增量同步,保存任务。
在任务列表中点击 启动。
./disql SYSDBA/Wei050210@192.168.201.128:5237 <<EOF SELECT * FROM DRS_TEST; EOF
应看到与源库完全相同的两行数据。
源库插入新数据:
./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
能看到新行即代表增量同步成功。
整个 DRS 部署过程中,遇到了多个典型问题,每个问题背后都有其根本原因和通用解决方案。以下是完整的问题回顾与总结,可作为后续 DRS 实践的标准排错指南。
现象:
instance2),发现连接串为 PORT=5236 而非预期的 5237。根本原因:
在 DMDFM 管理平台创建目标数据源时,误将端口号填成了 5236(源库端口)。或者只创建了一个数据源并复用在目标和源上。这导致目标 DRS 引擎实际连接的是源库实例,最终将数据装载回源库自身,引发主键冲突。
解决方案:
source 数据源端口为 5236,target 数据源端口为 5237,并分别测试连接成功。/data/dmdrs5/INST_DRS/instance2/drs.xml,将 <port>5236</port> 改为 <port>5237</port>。现象:
根本原因:
达梦 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 部署前,务必先执行权限检测,并确保源库归档及附加日志已开启。修改参数后一定要重启数据库才能生效。
现象:
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 重新加载元数据。
现象:
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 字典缓存。 这是解决装载类报错的最有效手段。清理后建议删除旧任务并新建,确保彻底。
现象:
mem_size参数配置过大,超过系统剩余内存大小。根本原因:
默认的 mem_size 配置可能为 16G,而虚拟机可用内存往往较小(如本次环境仅 13G 且已占用一部分)。
解决方案:
编辑实例的 drs.xml,将 <mem_size> 调整为合理值(如 2048 MB 或 4096 MB):
<mem_size>2048</mem_size>
或通过管理平台高级配置修改。之后重启代理服务。
教训:
部署前应评估系统剩余内存,合理配置 DRS 内存参数,避免资源争抢导致服务不稳定。
现象:
根本原因:
虚拟机内网 IP(192.168.x.x)无法直接从外部访问,需要端口转发或 SSH 隧道。
解决方案:
ssh -p 5235 -L 8080:192.168.200.208:8080 root@10.36.41.11
http://localhost:8080/dmdfm。教训:
在混合网络环境下,必须明确哪些 IP 是管理平台访问地址,哪些是 DRS 内部通信地址,避免混淆。SSH 隧道是最简单的远程访问方式。
source→5236,target→5237。instance2/log/ 中的执行日志,尤其关注 EXEC: 连接串和错误堆栈。以上所有坑点均已在本项目中复现并解决,可作为 DRS 实施的标准规避手册。今后的 DRS 部署严格遵循以上原则,可大幅减少调试时间。
文章
阅读量
获赞
