注册
DMDRS部署主备到单机同步
专栏/技术分享/ 文章详情 /

DMDRS部署主备到单机同步

打工人小赵 2025/09/19 80 0 0
摘要

1 DMDRS基础架构

DMDRS是同构/异构数据库数据迁移复制的模块化软件,支持数据迁移、同步、分发、转换四大核心功能,适配多种同步拓扑(一对一、双向、级联、环形、主备等)。
image.png

1.1 核心架构模块

MANAGER(服务管理)
- 提供客户端监听、模块加载维护及控制台命令执行。
CPT(数据捕获与投递)
- 负责源端全量/增量数据抓取、解析及投递。
DSS(数据分流存储)
- 按Topic分流存储数据,供下游使用。
EXEC(数据应用)
- 在目标端应用数据,确保一致性。
CVT(数据转换)
- 通过DRS语言自定义清洗转换规则(支持单操作级处理)。
SCHED(定时调度)
- 自动化执行CVT脚本、数据校验、同步任务等。
Console工具
- 基于TCP/IP的远程控制端。

1.2 核心功能

数据迁移
- 静态环境一次性迁移,支持同构/异构库,具备断点续传能力。
数据同步
- 全量装载:源库全量数据初始化至目标库。
- 增量同步:实时同步增量数据,确保动态一致性。
数据分发
- 全量/增量数据经流存储后分发给多目标库(一源多目标场景)。
-数据转换
- 自定义清洗转换规则,适配迁移/同步/分发场景。

1.3 兼容性

image.png

2 部署过程

2.1 数据库准备工作

2.1.1 开启源数据库的归档和逻辑日志
##归档
主备及目标端均已开启归档,路径为/dbarch/dmarch

##开启逻辑附加日志
call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);
根据实际需求配置RLOG_APPEND_LOGIC的参数值,参数配置说明如下所示,以参数值设置为1为例。
1:如果有主键列,记录UPDATE和DELETE操作时只包含主键列信息,若没有主键列则包含所有列信息。
2:不论是否有主键列,记录UPDATE和DELETE操作时都包含所有列的信息。
3:记录UPDATE时包含更新列的信息以及ROWID,记录DELETE时只有ROWID。

#检查参数配置是否生效
select para_name, para_value, sess_value, file_value from V$DM_INI where para_name in ( 'RLOG_APPEND_LOGIC','ARCH_INI');
行号        PARA_NAME        PARA_VALUE  SESS_VALUE  FILE_VALUE
---------- --------- ---------- ---------- ----------
1          ARCH_INI                        1           1         1
2          RLOG_APPEND_LOGIC     1          1          1
2.1.2 配置DDL同步
方式一:触发器方式(推荐)

在源数据库执行“ddl_sql_dm8.sql”脚本创建触发器和辅助表,脚本默认位置在DMDRS执行程序目录下的scripts子目录中。

SQL> set define off;
SQL> start ddl_sql_dm8.sql
检查创建的触发器和辅助表是否有效。

检查创建的触发器。

SQL> select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DRS_$%' and status = 'Y';
查询结果如下:

行号          OWNER          TRIGGER_NAME
----------   -----------    ----------------
1            SYSDBA         DRS_$DDL_TRIGGER_AFTER
2            SYSDBA         DRS_$DDL_TRIGGER_BEFORE
3            SYSDBA         DRS_$DDL_TRIGGER_GRANT
4            SYSDBA         DRS_$DDL_TRIGGER_REVOKE
已用时间: 12.147(毫秒). 执行号:16.
如果存在以上查询结果,表示DMDRS触发器创建有效。

检查创建的辅助表。

SQL> select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DRS_$%' and status = 'VALID';
查询结果如下:

行号          OWNER         TABLE_NAME
----------   -----------   ----------------
1            SYSDBA        DRS_$DDL_COL
2            SYSDBA        DRS_$DDL_SQL
3            SYSDBA        DRS_$DDL_CONS
4            SYSDBA        DRS_$DDL_IDX
5            SYSDBA        DRS_$DDL_RENAME
6            SYSDBA        DRS_$DDL_SEQ
7            SYSDBA        DRS_$DDL_PART
8            SYSDBA        DRS_$DDL_COMMENT
9            SYSDBA        DRS_$DDL_LOG
9 rows got
已用时间: 197.302(毫秒). 执行号:7.
如果存在以上查询结果,表示DMDRS辅助表创建成功。

方式二:系统表方式

设置源数据库配置文件“dm.ini”中RLOG_APPEND_SYSTAB_LOGIC参数。

静态配置

设置源数据库配置文件“dm.ini”中RLOG_APPEND_SYSTAB_LOGIC参数值为1。

#redo log
RLOG_APPEND_SYSTAB_LOGIC = 1
重启数据库服务,使配置生效。

动态配置

调用系统过程SP_SET_PARA_VALUE将源数据库配置文件“dm.ini”中RLOG_APPEND_SYSTAB_LOGIC参数值设置为1。此系统过程的定义请参考《DM8_SQL语言使用手册》。

SQL> call sp_set_para_value(1,'RLOG_APPEND_SYSTAB_LOGIC',1);
检查RLOG_APPEND_SYSTAB_LOGIC参数配置是否生效。

SQL>  select para_name, para_value, sess_value, file_value from V$DM_INI where para_name = 'RLOG_APPEND_SYSTAB_LOGIC';
查询结果如下:

行号        PARA_NAME                PARA_VALUE SESS_VALUE FILE_VALUE
---------- ------------------------ ---------- ---------- ----------
1          RLOG_APPEND_SYSTAB_LOGIC 1          1          1

已用时间: 3.708(毫秒). 执行号:506.
如果存在以上查询结果,表示RLOG_APPEND_SYSTAB_LOGIC参数配置已生效。

源数据库为DM8单机和DSC时,支持触发器方式和系统表方式配置DDL同步。级联同步和环形同步建议使用系统表方式配置DDL同步
表级同步不支持系统表方式同步DDL。
2.1.3 创建数据库同步用户DMDRS
CREATE TABLESPACE DMDRS DATAFILE 'DMDRS.DBF' SIZE 2048 AUTOEXTEND ON MAXSIZE 102400;
CREATE USER "DMDRS" IDENTIFIED BY "DMDRS@dmdrs2025" DEFAULT TABLESPACE "DMDRS";
GRANT "DBA" TO "DMDRS";

2.2 创建安装目录

DMDRS 默认安装目录在 home 目录下,也可根据需要自定义安装目录。创建如下安装目录:
[root@localhost /]# mkdir -p /home/dmdba/dmdrs5
[root@localhost /]# chown dmdba:dinstall -R /home/dmdba/dmdrs5/
[root@localhost /]# chmod -R 755 /home/dmdba/dmdrs5/

2.3 安装包处理

将 DMDRS 安装包上传到 opt 目录,并修改权限:
[root@localhost opt]# chown dmdba:dinstall dmdrs_rev195292_x86_rh6_64_20250801.bin
[root@localhost opt]# chmod -R 755 dmdrs_rev195292_x86_rh6_64_20250801.bin

2.4 DRS安装

./dmdrs_rev195292_x86_rh6_64_20250801.bin  -i
Extract install files..........

Please select the installer's language (E/e:English C/c:Chinese)[E/e]:c
-----------欢迎使用达梦数据复制软件安装工具-----------
输入[exit]可退出安装。
-----------安装目录-----------
指定安装目录[/home/dmdba/dmdrs5]:
-----------安装组件-----------
请选择需要安装的组件
1.安装达梦数据融合管理平台
2.安装代理
请选择安装组件数字序号(使用空格间隔):1 2
选择的组件有:
1.安装达梦数据融合管理平台
2.安装代理
确认?[Y/y(确认选择) or N/n(重新选择)]:y
-----------许可证文件-----------
1.免费试用达梦数据复制软件(必须在试用期范围内使用,反复安装无效,使用时间为3个月)
2.使用许可证文件
指定许可证文件(1,2)[1]:1
免费试用许可证文件限制信息如下:
有效日期:2025-10-16
版本类型:试用版
许可证编号:dm66n367
授权顾客名称:DEVELOP USER
当前选择为免费试用,是否继续安装?[Y/y or N/n]:y
-----------配置-----------
数据库驱动路径配置 -数据库驱动路径[/home/dmdba/dmdbms/bin]:
注意:代理配置IP不允许设置成127.0.0.1!
代理配置-代理IP(192.168.1.10,192.168.182.129):192.168.182.129
代理配置-代理端口[19345]:
达梦数据融合管理平台配置-管理平台端口[8080]:
注意:密码必须至少8个字符,并且满足以下条件中的任意[两项]:数字、大写字母、小写字母、特殊字符(如!@#$%^&*等)。
达梦数据融合管理平台配置-管理平台密码:
达梦数据融合管理平台配置-管理平台确认密码:
是否使用外置库(0:不使用  1:使用 )[0]:
注意:请输入9至48个字符长度的密码,并且满足以下条件中的任意[三项]:数字、大写字母、小写字母、特殊字符(如!@#$%^&*等)。
内置数据库配置-密码:
内置数据库配置-确认密码:
-----------安装小结-----------
安装目录:[/home/dmdba/dmdrs5]
数据库驱动路径:[/home/dmdba/dmdbms/bin]
代理IP:[192.168.182.129]
代理端口:[19345]
达梦数据融合管理平台IP:[127.0.0.1]
达梦数据融合管理平台端口:[8080]
内置库信息:
数据库IP:[127.0.0.1]
数据库端口:[15236]
用户名:[SYSDBA]
密码:[******]
所需磁盘空间/可用磁盘空间:[2,884 MB/77,222 MB]
确认安装?[Y/y or N/n]:y
-----------安装中-----------
server start ...    server finished.
default start ...    default finished.
agent start ...    agent finished.
web start ...    web finished.
doc start ...    doc finished.
db start ...    db finished.
安装成功
-----------系统服务-----------
内置数据库服务设置
1.注册系统服务
2.不注册系统服务
启动方式(1,2)[2]:
正在创建内置数据库服务....
达梦数据融合管理平台服务设置
1.注册系统服务
2.不注册系统服务
启动方式(1,2)[2]:
正在创建达梦数据融合管理平台服务....
达梦数据融合管理平台代理服务设置
1.注册系统服务
2.不注册系统服务
启动方式(1,2)[2]:
正在创建达梦数据融合管理平台代理服务....
正在启动服务[DmServiceDFDB]
正在启动服务[DfmWebService]
正在启动服务[DfmAgentService]
-----------安装总结-----------
达梦数据复制软件V5安装完成
地址:http://127.0.0.1:8080
用户名/密码:admin/******
更多安装信息,请查看安装日志文件:/home/dmdba/dmdrs5/log/install.log

2.5 源端目标端环境变量配置

##添加DRS及DPI
vi ~/.bash_profile
#添加
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dm/dmdbms/bin:/home/dmdba/dm/dmdbms/drivers/dpi:/home/dmdba/dmdrs5/bin"
export DM_HOME="/home/dmdba/dm/dmdbms"
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:/home/dmdba/dm/dmdbms/drivers/dpi:/home/dmdba/dmdrs5/bin

source ~/.bash_profile

2.6 配置dm_svc.conf

TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DMDW=(192.168.182.129:5238,192.168.182.130:5238)

[DMDW]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

2.7 cpt模块和exec模块配置

##源端
#主cpt.xml
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<drs>
  <base>
    <name>node1</name>
    <lang>ch</lang>
    <mgr_port>5645</mgr_port>
    <siteid>3</siteid>
    <mem_size>1</mem_size>
  </base>
  <cpt>
    <name>cpt_dm8</name>
    <char_code>GB18030</char_code>
    <ddl_mask>TABLE:ALTER:CREATE:DROP:TRUNCATE:DDL_REC:DDL_WARN</ddl_mask>
    <has_group>1</has_group>
    <login>
      <dbtype>dm8</dbtype>
      <user>DMDRS</user>
      <pwd>DMDRS@dmdrs2025</pwd>
      <port>5238</port>
    </login>
    <send>
      <ip>192.168.182.137</ip>
      <port>5645</port>
      <target_name>exec_dm8</target_name>
      <map>
        <item type="table">DMDRS.*==DMDRS.*</item>
      </map>
    </send>
    <cluster>
      <mode>master</mode>
      <standby>
        <ip>192.168.182.129</ip>
        <port>5745</port>
        <target_name>cpt_dm8</target_name>
      </standby>
      <local>192.168.182.130</local>
      <priority>1,10</priority>
    </cluster>
  </cpt>
</drs>
#备cpt.xml
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<drs>
  <base>
    <name>cluster1_2</name>
    <lang>ch</lang>
    <mgr_port>5745</mgr_port>
    <siteid>3</siteid>
  </base>
  <cpt>
    <name>cpt_dm8</name>
    <char_code>GB18030</char_code>
    <ddl_mask>TABLE:ALTER:CREATE:DROP:TRUNCATE:DDL_REC:DDL_WARN</ddl_mask>
    <has_group>1</has_group>
    <login>
      <dbtype>dm8</dbtype>
      <server>DMDW</server>
      <user>DMDRS</user>
      <pwd>DMDRS@dmdrs2025</pwd>
      <port>5238</port>
    </login>
    <send>
      <ip>192.168.182.137</ip>
      <port>5645</port>
      <target_name>exec_dm8</target_name>
      <map>
        <item type="table">DMDRS.*==DMDRS.*</item>
      </map>
    </send>
    <cluster>
      <mode>slave</mode>
      <local>192.168.182.129</local>
      <priority>1,10</priority>
    </cluster>
  </cpt>
</drs>

#目标端
<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>5345</mgr_port>
        <siteid>2</siteid>
        <lang>ch-utf8</lang>
    </base>
    <exec>
        <name>exec_dm8</name>
        <char_code>GB18030</char_code>
        <login>
            <dbtype>dm8</dbtype>
           <server>192.168.182.137</server>
            <user>DMDRS</user>
            <pwd>DMDRS@dmdrs2025</pwd>
            <port>5236</port>
        </login>
        <group>
        <item>
        <id>35</id>
        <exec_policy>0</exec_policy>
        <desc>
             <table>DMDRS.TEST</table>
          </desc>
        </item>
      </group>
    </exec>
</drs>

2.8 配置DMDRS服务脚本

cp ./service_template/TemplateService ./DrsService
vi DrsService
INSTALL_HOME=<安装目录>
PROG_DIR=<执行程序目录>
CONF_PATH=<配置文件路径>
EXEC_PROG_NAME=<可执行程序名>
SERVICE_TYPE_NAME=<服务类型名>

2.9 启动服务

[dmdba@dbtest1 bin]$ DrsService_Slave start
Starting DrsService_Slave: [ OK ]
[dmdba@dmtest2 bin]$ DrsService_Slave start
Starting DrsService_Slave: [ OK ]
[dmdba@dbtest3 bin]$ DrsService_Slave start
Starting DrsService_Slave: [ OK ]

2.10 添加同步表

2.10.1 小数量

添加同步表后,源DMDRS会将源数据库同步表的全量数据和增量数据同时发送到目标DMDRS,目标DMDRS会自动将表的全量数据装载到目标数据库,装载过程中增量数据会全部缓存到目标DMDRS,直至全量数据装载成功后才激活同步

##设置数据库当前最新的日志LSN作为日志解析的起始位置
alter cpt set lsn
##启动CPT
start cpt
##添加全量装载+增量同步
alter cpt_dm8 add table "sch.name='DMDRS' " DROP|CREATE|INSERT|GROUP|100000|INDEX|FAST
2.10.2 大数量
#拷贝备份文件到目的端
scp -r DB_FULL_2025_08_29_01_00_42 dmdba@192.168.182.137:/dbbak/dmbak
#目的端通过备份还原
./dmrman ctlstmt="RESTORE DATABASE '/dbdata/dmdata/DAMENG/dm.ini' FROM BACKUPSET  '/dbbak/dmbak/DB_FULL_2025_08_29_01_00_42'"
./dmrman ctlstmt="RECOVER DATABASE '/dbdata/dmdata/DAMENG/dm.ini' FROM BACKUPSET  '/dbbak/dmbak/DB_FULL_2025_08_29_01_00_42'"
./dmrman ctlstmt="RECOVER DATABASE '/dbdata/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;
alter database normal;
alter database open;
#源端
##设置数据库当前最新的日志LSN作为日志解析的起始位置
alter cpt_dm8 set lsn from "/dbbak/dmbak/DB_FULL_2025_08_29_01_00_42"
##启动CPT
start cpt
#动态地添加增量同步表DMDRS模式,添加后自动进行增量数据的同步。
alter cpt_dm8 add dict "sch.name='DMDRS'"

2.11 查看同步情况

##源端
#查询检查点
show cpt_dm8 ckpt
#查询正在装载的表
show cpt_dm8 load table running
#查看整体装载状态
show cpt_dm8 load status
#查看模块装载错误的表的具体信息。
show cpt_dm8 load table error
#查看CPT模块各装载状态(除表外)对象的具体信息。
show cpt_dm8 load obj all
##目的端
#查看EXEC模块的检查点信息。
show exec_dm8 ckpt
#查看EXEC模块同步表的延迟信息
show exec_dm8 lag
#查看EXEC模块的非装载工作线程信息
show exec_dm8 thr
#查看EXEC模块中,装载表分组装载的具体信息。
show exec_dm8 load group xxxx.xxxx
#查看EXEC模块的整体延迟信息。
show exec_dm8 link lag
#查看分组信息
SHOW [<EXEC_NAME>] [<SITE_ID>] GROUP [<GROUPID>]
2.12 DRS主备切换
#查看主备统计信息
show cpt_dm8 cluster
#切换名称为cpt_standby_dm“的CPT模块为主节点。
switch cpt_standby_dm8 master
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服