注册
DMDRS 数据迁移与单向数据同步
培训园地/ 文章详情 /

DMDRS 数据迁移与单向数据同步

倒吊人 2026/09/24 237 0 0

学习内容与环境

DMDRS 用于在不同数据库之间进行数据复制。本笔记围绕两类数据库链路展开:DM8 到 DM8,以及 Oracle 到 DM8。学习重点包括 DMDRS 服务部署、源端和目标端配置、一次性全量数据迁移、持续单向数据同步,以及迁移与同步在操作方式和使用场景上的区别。image.png

DMDRS 核心模块

image.png

1. DMDRS 安装部署

1.1 软件与驱动

DMDRS 访问不同数据库需要加载对应的数据库驱动。DM8 使用 DMDPI 驱动;Oracle 10g 及以上版本使用 OCI 驱动。因此 DM→DM 场景的源端和目标端均需要 DMDPI,Oracle→DM 场景的源端需要 OCI,目标端需要 DMDPI。

1.2 软件目录规划

image.png

1.3 设置运行用户权限

chown -R <dmdba>:<dinstall> /data/dmdrs5
chmod -R u+rwX /data/dmdrs5

1.4 配置数据库驱动环境变量

DM8 环境需要将 DMDPI 驱动目录加入 LD_LIBRARY_PATH:

vi ~/.bash_profile

export LD_LIBRARY_PATH=<DMDPI驱动路径>:$LD_LIBRARY_PATH

source ~/.bash_profile
echo $LD_LIBRARY_PATH

Oracle 源端则需要 OCI 驱动:

export LD_LIBRARY_PATH=<OCI驱动路径>:$LD_LIBRARY_PATH
source ~/.bash_profile
echo $LD_LIBRARY_PATH

1.5 DM8 源数据库归档和逻辑日志

持续同步依赖源数据库的归档日志和逻辑日志。DM8 源库至少要开启

ARCH_INI,并配置 RLOG_APPEND_LOGIC。
-- 检查参数
SELECT PARA_NAME, PARA_VALUE, SESS_VALUE, FILE_VALUE
FROM V$DM_INI
WHERE PARA_NAME IN ('ARCH_INI', 'RLOG_APPEND_LOGIC');

动态配置示例:

ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;

ALTER DATABASE ADD ARCHIVELOG
'DEST=<归档目录>,TYPE=LOCAL,FILE_SIZE=512,SPACE_LIMIT=10240';

ALTER DATABASE OPEN;

CALL SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 1);

说明:RLOG_APPEND_LOGIC=1 时,有主键表的 UPDATE/DELETE 逻辑日志主要记录主键列信息;无主键表则记录所有列。

1.6 配置 DM8 DDL 同步

当需要同步 CREATE/ALTER/DROP 等 DDL 操作,直接执行 DMDRS 自带的 ddl_sql_dm8.sql:

set define off;

start /data/dmdrs5/bin/scripts/ddl_sql_dm8.sql

执行后可检查 DRS 触发器和辅助表是否存在:

SELECT OWNER, TRIGGER_NAME
FROM DBA_TRIGGERS
WHERE OWNER='SYSDBA'
  AND TRIGGER_NAME LIKE 'DRS_$%'
  AND STATUS='Y';

SELECT OWNER, TABLE_NAME
FROM DBA_TABLES
WHERE OWNER='SYSDBA'
  AND TABLE_NAME LIKE 'DRS_$%'
  AND STATUS='VALID';

1.7 创建同步用户 DMDRS

源库和目标库均使用独立同步用户 DMDRS。
CREATE USER DMDRS IDENTIFIED BY "Dmdrs@2026";
GRANT DBA TO DMDRS;

1.8 配置目标 EXEC

目标端 EXEC 负责连接目标 DM8 并执行源端发送来的数据。当前目标数据库为 192.168.192.11:5236,Manager 端口 5346,站点号 2。

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5346</mgr_port>
        <siteid>2</siteid>
    </base>
    <exec>
        <name>exec_dm8</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.192.11</server>
            <user>DMDRS</user>
            <pwd>Dmdrs@2026</pwd>
            <port>5236</port>
        </login>
    </exec>
</drs>

1.9 配置源 CPT

源端 CPT 负责连接源 DM8、捕获/装载数据并发送到目标 EXEC。

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port>
        <siteid>1</siteid>
    </base>
    <cpt>
        <name>cpt_dm8</name>
        <ddl_mask>OBJ:OP</ddl_mask>
        <login>
            <dbtype>dm8</dbtype>
            <server>192.168.168.11</server>
            <user>DMDRS</user>
            <pwd>Dmdrs@2026</pwd>
            <port>5237</port>
        </login>
        <send>
            <ip>192.168.168.11</ip>
            <port>5346</port>
            <target_name>exec_dm8</target_name>
            <map>
                <item>DMDRS.*==DMDRS.*</item>
            </map>
        </send>
    </cpt>
</drs>

1.10 配置服务脚本与启动顺序

手册使用 service_template 中的 TemplateService 管理 drsvr。原则是先启动目标 EXEC 服务,再启动源 CPT 服务。

cd /data/dmdrs5/bin/service_template
cp TemplateService ../DrsService
cd /data/dmdrs5/bin

# 目标端脚本核心参数
INSTALL_HOME=/data/dmdrs5
PROG_DIR=/data/dmdrs5/bin
CONF_PATH=/data/dmdrs5/bin/exec.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"

./DrsService start
源端脚本把 CONF_PATH 改为 cpt.xml:

INSTALL_HOME=/data/dmdrs5
PROG_DIR=/data/dmdrs5/bin
CONF_PATH=/data/dmdrs5/bin/cpt.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"

./DrsService start

2. DM → DM 数据迁移

数据迁移用于一次性把源端已有数据全量复制到目标端。手册的 DM8→DM8 示例通过 CPT 的 cp 命令完成全量迁移,迁移功能本身不需要先启动 CPT 的持续日志捕获模块。

2.1 启动目标和源 DMDRS 服务

  • 先启动目标端 exec.xml 对应的 DrsService。
  • 再启动源端 cpt.xml 对应的 DrsService。
  • 确认两端 Manager 端口能够正常建立网络连接。

2.3 执行全量迁移

cd /data/dmdrs5/bin

./drcsl cpt.xml

CSL> connect

迁移单表:

CSL> alter cpt_dm8 cp "sch.name='DMDRS' and tab.name='表名'"

迁移整个模式时,可按对象过滤条件扩大范围:

CSL> alter cpt_dm8 cp "sch.name='DMDRS'"

2.4 验证迁移结果

-- 源端
SELECT COUNT(*) FROM DMDRS.<表名>;

-- 目标端
SELECT COUNT(*) FROM DMDRS.<表名>;

3. DM → DM 单向数据同步

单向同步的目标不仅是复制已有数据,还要持续捕获源端后续的 INSERT、UPDATE、DELETE,必要时还包括 DDL,使目标端持续跟随源端变化。

3.1 同步前置条件

  • 源 DM8 开启归档。
  • 源 DM8 开启 RLOG_APPEND_LOGIC。
  • 需要 DDL 同步时执行 ddl_sql_dm8.sql。
  • CPT 能读取源数据库归档日志。
  • 源 CPT 与目标 EXEC 的 siteid 唯一,target_name 与 exec 名称一致。

3.2 建立日志解析起点

cd /data/dmdrs5/bin
./drcsl cpt.xml

CSL> connect
CSL> alter cpt_dm8 set lsn
set lsn 

将数据库当前最新日志位置设置为日志解析起点。这一步决定持续增量捕获从哪里开始。

3.3 启动 CPT 增量捕获

CSL> start
此时 CPT 开始按照配置解析源数据库日志并向目标 EXEC 发送变化。

3.4 添加同步对象并执行初始装载

同步整个 DMDRS 模式:

CSL> alter cpt_dm8 add table "sch.name='DMDRS'" 
同步单表:
CSL> alter cpt_dm8 add table "sch.name='DMDRS' and tab.name='表名'" 

说明:手册中的 add table 不只是登记后续增量对象,还会在开始持续同步前把源端该对象的全量数据装载到目标端。

3.5 验证 DM→DM 单向同步

在源端进行 DML:

INSERT INTO DMDRS.<表名>(...) VALUES (...);
COMMIT;

UPDATE DMDRS.<表名>
SET ...
WHERE ...;
COMMIT;

DELETE FROM DMDRS.<表名>
WHERE ...;
COMMIT;

然后在目标端检查对应记录是否自动出现、修改或删除。
若配置了 DDL 同步,可再测试:

ALTER TABLE DMDRS.<表名> ADD TEST_COL VARCHAR(50);

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服