注册
DRS与DVS学习
专栏/技术分享/ 文章详情 /

DRS与DVS学习

夏雨雨雨雨雨 2026/09/04 110 1 0
摘要

DRS与DVS学习报告

一、学习背景

在数据库系统的日常运维中,数据同步与一致性校验是两项高频需求——无论是构建容灾备份系统、实现读写分离,还是在系统升级迁移过程中保持业务不中断,都离不开高效可靠的数据复制与校验工具。达梦数据复制软件(DMDRS)与达梦数据校验软件(DMDVS)正是为解决上述问题而推出的企业级产品组合。

二、学习目标

1、掌握DRS和DVS的原理

2、部署安装DRS

3、实现DM8-DM8的一对一单向DRS同步

DRS 安装部署与单向同步

一、DMDRS 原理

1.1 DMDRS 介绍

达梦数据实时同步软件(DMDRS)是达梦数据库官方推出的数据复制工具,支持同构及异构数据库之间的数据实时同步。它采用基于日志的结构化数据复制技术,不依赖源数据库的触发器或规则,对源数据库系统几乎无影响,能以极少的系统开销实现秒级甚至亚秒级的数据实时同步。

与传统的DTS迁移工具不同,DTS通常要求在迁移过程中停机以防止数据不一致,而DMDRS通过全量装载与增量同步的组合,能够在不需要长时间停机的情况下完成数据迁移。

1.2 核心工作原理

DMDRS的核心工作原理可以概括为:源库产生日志,DMDRS解析日志,目标端执行日志

源数据库的每一次数据变更都会产生对应的重做日志(Redo Log),每条日志记录都有唯一的LSN(Log Sequence Number)。源端DMDRS从指定的起始LSN开始,持续捕获并解析增量日志,将解析出的INSERT、UPDATE、DELETE以及DDL操作转换为内部消息格式,通过网络发送至目标端;目标端DMDRS接收消息后,在目标数据库中执行相应操作,从而实现数据同步。

1.3 核心模块

DMDRS采用模块化设计,各模块职责明确、协同工作,统一由MGR管理:

模块 全称 核心职责
MGR Manager管理模块 解析配置参数,加载和维护其他模块,提供客户端监听与控制命令执行。当启动捕获器功能时调度CPT和NET模块;启动执行器功能时调度NET和EXEC模块
CPT 捕获模块 对源数据库增量日志进行捕获与解析,结合数据字典提取数据变化(INSERT/DELETE/UPDATE/DDL),转换为内部消息格式投递给NET模块
LOAD 装载模块 在增量同步之前,完成同步表的字典装载和全量数据的初始装载,使源库和目标库初始数据保持一致
NET 传输模块 承担节点之间数据的收发任务,分为接收子模块(RECV)与发送子模块(SEND)。多对一、一对多等拓扑的数据传输均通过NET实现
EXEC 执行模块 接收CPT捕获的增量数据,在目标数据库中执行入库操作。采用符合SQL92标准的SQL语句,通过ODBC接口和目标端数据库交互

1.4 支持的拓扑结构

DMDRS支持多种同步拓扑结构,可满足不同业务场景的需求:

一对一:一个源端同步到一个目标端

一对多:一个源端同步到多个目标端

多对一:多个源端同步到一个目标端

双向同步:两端互相同步

级联同步:A→B→C 链式同步

环形同步:多节点环形同步

二、DRS 部署环境

2.1 硬件环境

本次安装部署使用的两台服务器配置如下:

DMDRS 服务器 IP地址 处理器 内存 硬盘
源端 DMDRS 192.168.229.184 4 * 2 核 4GB 50GB
目标端 DMDRS 192.168.229.183 4 * 2 核 4GB 50GB

2.2 数据库基础环境

在两台服务器上各部署了一个达梦数据库实例,具体参数如下:

实例名 角色 IP 数据库端口 管理端口 站点号 数据目录 归档目录
DMSERVER 源端 192.168.229.184 5236 5446 1 /dbdata/dmdata/DAMENG /dbarch/dmarch
DMSERVER 目标端 192.168.229.183 5236 5446 2 /dbdata/dmdata/DAMENG /dbarch/dmarch

三、数据库前期准备

3.1 源端数据库参数配置

(1)开启归档日志

DMDRS的CPT模块需要从归档日志中捕获数据变更,因此必须先开启归档:

# 在安装DM8单机库时我已配好归档路径,所以以下仅供未配好路径的人参考 alter database mount; alter database ARCHIVELOG; alter database ADD ARCHIVELOG 'type=local, dest=/dbarch/dmarch, file_size=128, space_limit=10240'; alter database open;

配置完成后,可以通过查询v$arch_status视图确认归档状态:

SQL> select * from v$arch_status; 行号 ARCH_TYPE ARCH_DEST ARCH_STATUS ARCH_SRC ---------- --------- -------------- ----------- -------- 1 LOCAL /dbarch/dmarch VALID DMSERVER 已用时间: 14.684(毫秒). 执行号:71001.

(2)开启逻辑日志

逻辑日志是DMDRS捕获增量数据的基础。通过以下命令将RLOG_APPEND_LOGIC参数设置为1(表示UPDATE和DELETE操作记录主键信息):

call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);

参数值1、2、3的含义不同——1只记录主键,2记录所有列,3记录更新列和ROWID。对于大多数场景,设置为1已经足够,但如果同步的表没有主键,则需要设置为2。

(3)创建DMDRS测试用户

在源端创建DMDRS用户,并赋予权限:

CREATE USER DMDRS IDENTIFIED by "Dmdrs123"; grant "RESOURCE","PUBLIC","VTI","SOI","SVI" to "DMDRS"; grant CREATE SESSION to "DMDRS";

(4)创建测试表并插入数据

为了验证同步效果,在源端创建了一张简单的测试表:

SQL> CREATE TABLE DMDRS.T1 ( ID INT, NAME VARCHAR(50), CREATE_TIME DATE ); SQL> INSERT INTO DMDRS.T1 VALUES (1, '测试数据1', SYSDATE); INSERT INTO DMDRS.T1 VALUES (2, '测试数据2', SYSDATE); INSERT INTO DMDRS.T1 VALUES (3, '测试数据3', SYSDATE); SQL> commit; #验证数据是否存在 SQL> select * from DMDRS.T1; 行号 ID NAME CREATE_TIME ---------- ----------- ------------- ------------------- 1 1 测试数据1 2026-09-01 13:13:20 2 2 测试数据2 2026-09-01 13:13:20 3 3 测试数据3 2026-09-01 13:13:21 已用时间: 10.294(毫秒). 执行号:82406.

3.2 目标端数据库参数配置

(1)开启归档日志

与源端相同的操作:

alter database mount; alter database ARCHIVELOG; alter database ADD ARCHIVELOG 'type=local, dest=/dbarch/dmarch, file_size=128, space_limit=10240'; alter database open;

(2)创建DMDRS测试用户

目标端同样需要创建DMDRS用户,用于执行模块(EXEC)连接数据库并写入数据:

CREATE USER DMDRS IDENTIFIED by "Dmdrs123"; grant "RESOURCE","PUBLIC","VTI","SOI","SVI" to "DMDRS"; grant CREATE SESSION to "DMDRS";

四、DMDRS 安装

源端和目的端的DRS安装操作相同,如果想要方便,简化流程,可以在一台服务器安装好DMDRS后,克隆一台新的服务器,改一下IP地址即可。

4.1 安装步骤

已将安装包通过xftp传入到/opt/dm目录下,在root下授予安装包执行权限,将属主和属组给dmdba

chmod +x /opt/dm/dmdrs_rev218265_x86_rh6_64_20260409.bin chown -R dmdba:dinstall /opt/dm su - dmdba cd /opt/dm ./dmdrs_rev218265_x86_rh6_64_20260409.bin -i

4.2 安装过程

[dmdba@localhost /opt/dm]$ ./dmdrs_rev218265_x86_rh6_64_20260409.bin -i Please select the installer's language (C/c:Simplified Chinese, H/h: Hong Kong Traditional Chinese, E/e: Eng lish)[E/e]:c -----------欢迎使用达梦数据复制软件安装工具----------- 输入[exit]可退出安装。 -----------安装目录----------- 指定安装目录[/home/dmdba/dm/dmdrs5]: -----------安装组件----------- 请选择需要安装的组件 1.安装达梦数据融合管理平台 2.安装代理 请选择安装组件数字序号(使用空格间隔):1 2 选择的组件有: 1.安装达梦数据融合管理平台 2.安装代理 确认?[Y/y(确认选择) or N/n(重新选择)]:y -----------许可证文件----------- 1.免费试用达梦数据复制软件(必须在试用期范围内使用,反复安装无效,使用时间为3个月) 2.使用许可证文件 指定许可证文件(1,2)[1]:1 免费试用许可证文件限制信息如下: 有效日期:1974-04-01 版本类型:试用版 许可证编号:dm66n367 授权顾客名称:DEVELOP USER 当前选择为免费试用,是否继续安装?[Y/y or N/n]:y -----------配置----------- 数据库驱动路径配置 -数据库驱动路径[]:/home/dmdba/dm/dmdbms/bin 注意:代理配置IP不允许设置成127.0.0.1! 代理配置-代理IP(192.168.229.184):192.168.229.184 代理配置-代理端口[19345]: 达梦数据融合管理平台配置-管理平台端口[8080]: 注意:密码必须至少8个字符,并且满足以下条件中的任意两项:数字、大写字母、小写字母、特殊字符(如!@#$%^&*等)。 达梦数据融合管理平台配置-管理平台密码: 达梦数据融合管理平台配置-管理平台确认密码: 是否使用外置库(0:不使用 1:使用 )[0]:1 外置库配置-数据库服务IP:192.168.229.184 外置库配置-数据库端口[15236]:5236 外置库配置-用户名[SYSDBA]: 外置库配置-密码[]: -----------安装小结----------- 安装目录:[/home/dmdba/dm/dmdrs5] 数据库驱动路径:[/dmdba/dmdbms/bin] 代理IP:[192.168.229.184] 代理端口:[19345] 达梦数据融合管理平台IP:[127.0.0.1] 达梦数据融合管理平台端口:[8080] 外置库信息: 数据库IP:[192.168.229.184] 数据库端口:[5236] 用户名:[SYSDBA] 密码:[******] 所需磁盘空间/可用磁盘空间:[1,768 MB/26,359 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. 安装成功 -----------系统服务----------- 达梦数据融合管理平台服务设置 1.注册系统服务 2.不注册系统服务 启动方式(1,2)[2]:1 正在创建达梦数据融合管理平台服务.... 达梦数据融合管理平台代理服务设置 1.注册系统服务 2.不注册系统服务 启动方式(1,2)[2]:1 正在创建达梦数据融合管理平台代理服务.... 以下配置脚本需要以"root"用户的身份运行. /home/dmdba/dm/dmdrs5/scripts/root/root_installer.sh 是否已执行shell脚本?(Y/y or N/n)[Y/y]:y -----------安装总结----------- 达梦数据复制软件V5安装完成 地址:http://127.0.0.1:8080 用户名/密码:admin/****** 更多安装信息,请查看安装日志文件:/home/dmdba/dm/dmdrs5/log/install.log

安装完成后,系统提示使用root用户执行注册脚本:

/home/dmdba/dm/dmdrs5/scripts/root/root_installer.sh

4.3 DDL同步辅助配置

如果需要同步DDL操作(如CREATE TABLE、ALTER TABLE等),需要在源端执行DDL辅助脚本:

set define off; start /dmdba/dmdrs5/bin/scripts/ddl_sql_dm8.sql

执行后,查询创建的触发器和表:

-- 查看DDL触发器 select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DRS_$%' and status = 'Y'; -- 查看DDL相关表 select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DRS_$%' and status = 'VALID';

五、参数配置详解

5.1 目的端配置

5.1.1 JDK环境配置

DMDRS的部分功能依赖Java环境,首先配置JDK环境变量:

cat >> /etc/profile <<EOF export JAVA_HOME=/usr/local/jdk export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib export PATH=$JAVA_HOME/bin:$PATH EOF source /etc/profile

如果不确定自己有没有配置过,可以用以下语句验证:

[root@localhost etc]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

如果已有java相关版本,可以不用执行

5.1.2 DMDPI环境配置

DMDPI是达梦数据库的编程接口,DMDRS需要通过它连接数据库:

cat >> ~/.bash_profile <<EOF export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dm/dmdbms/bin" export DM_HOME="/home/dmdba/dm/dmdbms" export PATH="$PATH:$DM_HOME/bin" EOF source ~/.bash_profile

5.1.3 启动脚本配置

通过复制模板文件创建了目标端的启动脚本:

cd /home/dmdba/dm/dmdrs5/bin cp service_template/TemplateService ./DrsService_Slave vim DrsService_Slave

修改后的关键配置如下:

INSTALL_HOME=/home/dmdba/dm/dmdrs5 PROG_DIR=/home/dmdba/dm/dmdrs5/bin CONF_PATH=/home/dmdba/dm/dmdrs5/bin/exec.xml NEED_LIB_PATH=/home/dmdba/dm/dmdbms/bin EXEC_PROG_NAME=drsvr SERVICE_TYPE_NAME="drs server"

5.1.4 EXEC模块配置文件

目标端运行的是执行模块(EXEC),创建exec.xml配置文件如下:

cd /home/dmdba/dm/dmdrs5/bin cp conf_sample/exec.xml . vim exec.xml

配置文件内容:

<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5446</mgr_port> <!-- 管理端口,与源端保持一致 --> <siteid>2</siteid> <!-- 站点号,全局唯一 --> </base> <exec> <name>exec_dm8</name> <!-- 执行模块名称 --> <login> <dbtype>dm8</dbtype> <!-- 数据库类型 --> <server>192.168.229.183</server> <!-- 目标端IP --> <user>SYSDBA</user> <!-- 连接用户 --> <pwd>SYSDBA</pwd> <!-- 用户密码 --> <port>5236</port> <!-- 数据库端口 --> </login> </exec> </drs>

易错点:上面的连接用户和密码为外置库的用户和密码。

5.2 源端配置

5.2.1 JDK和DMDPI环境配置

与目标端相同的配置操作。

5.2.2 启动脚本配置

cd /home/dmdba/dm/dmdrs5/bin cp service_template/TemplateService ./DrsService_Master vim DrsService_Master

修改后的关键配置:

INSTALL_HOME=/home/dmdba/dm/dmdrs5 PROG_DIR=/home/dmdba/dm/dmdrs5/bin CONF_PATH=/home/dmdba/dm/dmdrs5/bin/cpt.xml NEED_LIB_PATH=/home/dmdba/dm/dmdbms/bin EXEC_PROG_NAME=drsvr SERVICE_TYPE_NAME="drs server"

5.2.3 CPT模块配置文件

源端运行的是捕获模块(CPT),创建cpt.xml配置文件如下:

cd /home/dmdba/dm/dmdrs5/bin cp conf_sample/cpt.xml ./ vim cpt.xml

配置文件内容:

<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5446</mgr_port> <!-- 管理端口 --> <siteid>1</siteid> <!-- 站点号,全局唯一 --> </base> <cpt> <name>cpt_dm8</name> <!-- 捕获模块名称 --> <login> <dbtype>dm8</dbtype> <!-- 数据库类型 --> <server>192.168.229.184</server> <!-- 源端IP --> <user>SYSDBA</user> <!-- 连接用户 --> <pwd>SYSDBA</pwd> <!-- 用户密码 --> <port>5236</port> <!-- 数据库端口 --> </login> <send> <ip>192.168.229.184</ip> <!-- 目标端IP --> <port>5446</port> <!-- 目标端管理端口 --> <target_name>exec_dm8</target_name> <!-- 目标端执行模块名称 --> <map> <item>DMDRS.*==DMDRS.*</item> <!-- 映射规则:源端DMDRS模式同步到目标端DMDRS模式 --> </map> </send> </cpt> </drs>

映射规则DMDRS.*==DMDRS.*的含义是将源端DMDRS模式下的所有表同步到目标端同名的DMDRS模式下。如果源端和目标端的模式名不同,可以写成源模式.*==目标模式.*的形式。

六、启动同步服务

6.1 前台启动

在正式以后台服务方式运行之前,先用前台方式启动,以便观察启动日志,确认配置无误。

目标端前台启动:

[dmdba@localhost bin]$ ./drsvr exec.xml

源端前台启动:

[dmdba@localhost ~/dmdrs5/bin]$./drsvr cpt.xml MGR[WARN]: 未能检测到dmdrs.key文件,即将体验免费版 MGR[INFO]: DRS start up, current version: V5.2.5.4-Build(2026.04.08-218265_trunc_sp2)_64 (X86)(The beta)(Enterprise Edition) MGR[WARN]: mem_size参数配置过大,超过系统剩余内存大小 mem_size: 16G, total_free_size: 1G MGR[WARN]: 无key状态下DRS性能受限制 parse_thr: 1 MGR[INFO]: 模块被加载 module: cpt_dm8 MGR[INFO]: 正在初始化缓存模块 path: ./cpt_dm8/CACHE_cpt_dm8, buffers size: 256 MB MGR[INFO]: SITEID: 1 NAME: localhost.localdomain MEMCHECK: 0 PORT: 5446 GROUP: 0 VERSION: 1 PATH: cpt.xml

6.2 后台服务方式启动

前台验证通过后,改用服务脚本以后台方式启动:

目标端:

[dmdba@localhost bin]$ ./DrsService_Slave start Starting DrsService_Slave: [ OK ]

源端:

[dmdba@localhost bin]$ ./DrsService_Master start Starting DrsService_Master: [ OK ]

6.3 通过控制台执行同步命令

服务启动后,通过DRS控制台(drcsl)执行同步操作。

进入源端的控制台:

[dmdba@localhost bin]$ ./drcsl CSL>

6.3.1 设置起始LSN

需要先连接DRS的管理端口,LSN(Log Sequence Number)是日志序列号,CPT模块从指定的LSN开始解析日志:

CSL> connect 127.0.0.1:5446 CSL[INFO]: [INPUT CMD: connect 127.0.0.1:5446] CSL> alter cpt_dm8 set lsn CSL[INFO]: [INPUT CMD: alter cpt_dm8 set lsn] MGR[INFO]: 成功获取模块的起始SCN cpt name: cpt_dm8, LSN: 2273121 命令执行成功

如果不手动设置LSN,CPT模块会从当前最新的LSN开始捕获。手动设置LSN可以控制同步的起始点,在需要重新同步或跳过某些变更时非常有用。

6.3.2 添加需要同步的表

CSL> alter cpt_dm8 add table "sch.name='DMDRS'" CSL[INFO]: [INPUT CMD: alter cpt_dm8 add table "sch.name='DMDRS'"] MGR[INFO]: 获取到装载掩码组合 mask: |CREATE|INSERT|INDEX|TABLE|CHECK|GROUP 命令执行成功

这个命令的含义是:将DMDRS模式下的所有表添加到同步列表中。此时CPT模块会自动执行全量装载,将源端数据装载到目标端。

6.3.3 启动增量同步

CSL> start CSL[INFO]: [INPUT CMD: start] MGR[INFO]: 模块正在启动 module: cpt_dm8 MGR[INFO]: CPT准备就绪 type: dm8 cpt MGR[INFO]: 模块已经处于运行状态 module: cpt_dm8 命令执行成功

七、验证同步结果

7.1 查看进程

[root@localhost ~]# ps -ef|grep drsvr dmdba 3535 1 3 12:26 pts/0 00:00:00 /home/dmdba/dm/dmdrs5/bindrsvr /home/dmdba/dm/dmdrs5/bin/exec.xml -noconsole root 3573 3454 0 12:26 pts/1 00:00:00 grep --color=auto drsvr

确认DRS服务进程正在运行。

7.2 在目标端验证数据

登录目标端数据库,查询t1表:

SQL> select * from dmdrs.t1; 行号 ID NAME CREATE_TIME ---------- ----------- ------------- ------------------- 1 1 测试数据1 2026-09-01 13:13:20 2 2 测试数据2 2026-09-01 13:13:20 3 3 测试数据3 2026-09-01 13:13:21 已用时间: 12.011(毫秒). 执行号:82101.

数据同步成功!

DMDVS 原理学习

一、DMDVS的工作原理与功能

1.1 DMDVS介绍

达梦数据校验软件(DMDVS)是一款企业级数据一致性管理平台,提供跨数据库、跨平台的数据比对与修复能力。在数据迁移、灾备、实时数据集成等场景中,数据从源端同步到目标端后,需要确认两端数据完全一致。

传统的做法是人工写SQL对比,面对几百张表、上亿行数据时既不现实也不可靠。DMDVS正是为解决这一问题而推出。

1.2 核心功能特性

DMDVS具备以下核心能力:

自动化校验:无需人工逐表对比,一条命令完成全量校验

高性能:智能分组+并行查询+MD5比对,百万数据秒级完成

精准定位:不仅能告知数据不一致,还能定位到具体是哪一行、哪一列不一致

自动修复:发现差异后,可一键将目标端数据修复为与源端一致

DMDVS已被广泛应用于金融、电力、政务等关键行业的数据一致性保障场景。

1.3 产品架构

DMDVS采用模块化框架设计:

模块 核心职责
Manager管理模块 负责客户端监听、加载和维护CMP与CMP_DSTB模块,执行控制台命令
CMP模块 提供数据校验、报告生成、修复、备份、还原及进度监控
CMP_DSTB模块 分布式数据校验中心,处理任务分配、结果统计及报告生成
Console远程控制工具 允许用户通过网络远程启动、停止校验任务,监控进度并查看报告

1.4 校验模式

DMDVS支持四种核心校验模式,以适应不同场景:

校验模式 适用场景
静态数据校验 数据迁移验证、容灾基线核查——源库与目标库处于静止状态(无写入),校验服务器可同时访问两端
动态数据校验 DMDRS增量同步过程中实时校验,不影响同步性能。需要开启数据库闪回功能(ENABLE_FLASHBACK=1)
单向数据校验 涉密网络与互联网区域数据比对——存在网闸隔离,只能单向通信
分布式数据校验 PB级海量数据、资源受限环境、跨地域多数据中心并行校验
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服