功能介绍
模块介绍
安装DRS
配置数据库
配置DRS
启动服务
常见命令
参考文章:代码数据复制软件DMDRS快速上手
达梦数据复制软件(DMDRS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实同步复制。
本文将介绍dmdrs以及部署和简单的使用。
DMDRS主要有以下功能
数据迁移是指将源数据库的全量数据一次性迁移到目标数据库
与DTS有什么区别?
DMDTS通常要求在迁移过程中进行停机,以防止源端和目的端数据出现不一致的情况。尤其是在大数据量迁移的情况下,DMDTS可能需要较长的停机时间
而DMDRS则通过增量同步数据的方式,能够在不需要长时间停机的情况下完成数据迁移
通过全量数据装载和增量数据同步的组合来实现数据复制功能,实现源数据库在动态的场景下和目标数据库数据的一致性,支持一对一,双向,一对多,多对一,级联,环形等,具体的概念参考DRS数据同步。
对需要同步或者分发的数据进行高度自定义的转换
详细模块介绍见DMDRS产品模块,这里只简单介绍与本文较为相关的模块
负责加载其他模块,以及客户端监听,执行控制命令等
主要负责对数据的解析,装载和投递
负责接受cpt模块发送的数据,在目标库进行应用
本次部署的类型:单节点一对一同步 DM - DM
演示的环境:
源库:DM8 CentOS7
目的库:DM8 CentOS7
参考DMDRS的安装,源库和目标库都需要,只需要DMDRS的功能的话可以不勾选达梦融合平台和代理。
除非特殊说明,否则源库和目标库都要执行
在源库和目标库各创建一个名为testdrs的库,使用dbca图形化界面,其中源库勾选创建示例库dmhr,用于模拟后续的数据同步。
在dm.ini中将ARCH_INI设为1,然后创建dmarch.ini,写入以下内容,归档路径,归档文件大小和归档空间限制根据实际填写
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = F:\dmdbms\data\TESTDRS\arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
将dm.ini中的RLOG_APPEND_LOGIC设为1,记得重启数据库
可选,使用下述语句查看并修改redo日志大小
SELECT PATH,RLOG_SIZE/1024/1024 FROM SYS.V$RLOGFILE;
ALTER DATABASE RESIZE LOGFILE 'F:\dmdbms\data\TESTDRS\TESTDRS01.log' TO 6144
创建一个用户用来执行dmdrs操作
CREATE USER DMDRS IDENTIFIED BY Dameng123;
GRANT DBA TO DMDRS;
GRANT PUBLIC TO DMDRS;
只需源库执行
执行dmdrs目录中的script中的ddl_sql_dm8.sql脚本
执行完检查辅助表和触发器
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';
结果中应包含4个触发器和9个表
源端服务主要包括manager和cpt模块,所以这里只要配置cpt就好
在conf_sample文件夹中,cpt.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port><!--如:5345-->
<siteid>1</siteid><!--如:1-->
</base>
<cpt>
<name>cpt_dm8</name><!--如:cpt_dm8-->
<login>
<dbtype>dm8</dbtype><!--如:dm8-->
<server>127.0.0.1</server><!--如:192.168.20.24-->
<user>DMDRS</user><!--如:DMDRS-->
<pwd>Dameng123</pwd><!--如:DMDRS-->
<port>5238</port><!--如:5236-->
</login>
<send>
<ip>192.168.221.130</ip><!--如:192.168.20.21-->
<port>5345</port><!--如:5345-->
<target_name>exec_dm8</target_name><!--如:exec_dm8-->
<map>
<item type="table">*.*==*.*</item><!--如:*.*==*.*-->
<item type="object">*.*==*.*</item>
</map>
</send>
</cpt>
</drs>
目的端服务包含manager和exec模块,所以这里只配置exec模块就好
在conf_sample文件夹中,exec.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port><!--如:5345-->
<siteid>2</siteid><!--如:2-->
</base>
<exec>
<name>exec_dm8</name><!--如:exec_dm8-->
<login>
<dbtype>dm8</dbtype><!--如:dm8-->
<server>192.168.221.130</server><!--如:192.168.20.21-->
<user>DMDRS</user><!--如:DMDRS-->
<pwd>DMDRS</pwd><!--如:DMDRS-->
<port>5238</port><!--如:5236-->
</login>
</exec>
</drs>
dmdrs提供了启动服务脚本的模板,默认在bin目录下的service_template文件夹中的TemplateService,修改其中的部分参数,并将其移动到bin目录下,可以根据自己的需求更改名字。本文中将其命名为了DrsService
其中的需要配置的参数如下:
INSTALL_HOME=<安装目录>
PROG_DIR=<执行程序目录>
CONF_PATH=<配置文件路径>
EXEC_PROG_NAME=<可执行程序名>
SERVICE_TYPE_NAME=<服务类型名>
| 服务名 | 服务脚本模板目录 | 安装目录 | 执行程序目录 | 配置文件路径(以默认配置文件名为例) | 默认服务脚本名 | 可执行程序名 | 服务类型名 |
|---|---|---|---|---|---|---|---|
| 源DMDRS | /home/dmdrs/dmdrs5/bin/service_template | /home/dmdrs/dmdrs5 | /home/dmdrs/dmdrs5/bin | /home/dmdrs/dmdrs5/bin/drs.xml | DrsService | drsvr | “drs server” |
| 目标DMDRS | /home/dmdrs/dmdrs5/bin/service_template | /home/dmdrs/dmdrs5 | /home/dmdrs/dmdrs5/bin | /home/dmdrs/dmdrs5/bin/drs.xml | DrsService | drsvr | “drs server” |
| DMDSS | /home/dmdrs/dmdrs5/bin/service_template | /home/dmdrs/dmdrs5 | /home/dmdrs/dmdrs5/bin | /home/dmdrs/dmdrs5/bin/dss.xml | DssService | dssvr | “dss server” |
默认配置文件是drs.xml,该文件并未提供,你可以在bin目录下新建一个drs.xml然后根据源端或者目的端将上文中在cpt.xml/exec.xml的配置复制过来
源端和目的端都要启动,先启动目的端再启动源端
# 目的端
./DrsService start
# 源端
./DrsService start
在源端连接Manager模块
# 默认使用同目录下的drs.xml文件
./drcsl
# 或者 指定其他地方的xml文件
./drcsl ./conf_sample/cpt.xml
CSL> connect
装载,同步命令
-- 设置数据库当前lsn值
ALTER cpt_dm8 set ls
-- 按模式对数据进行装载
cp cpt_dm8 "sch.name in ('schema_name1','schema_name2')" drop|create|insert
-- 按表名对数据进行装载
cp cpt_dm8 "sch.name = 'schema_name' and tab.name = 'table_name'" drop|create|insert
-- 对同步的模式进行字典的更新
alter cpt add dict "sch.name in ('schema_name')"
-- 启动所有模块
start
检查同步状态命令
-- 检查同步状态(源端
cpt
-- 检查exec站点状态(目的端
show exec
-- 检查检查点信息(源端
show ckpt
-- 检查源端工作线程信息(目的端
show thr
-- 检查事务信息(目的端
show trx
使用以下命令启动同步
cp cpt_dm8 "sch.name in ('DMHR')" drop|create|insert
start
使用以下命令查看同步状态
cpt
使用dm数据管理工具连接目标库查看迁移情况
可见到模式DMHR已成功迁移。
类似dmdrs的软件还有dmhs,经过测试,dmdrs的同步效率明显高于dmhs,因为dmhs采用归档的的方式进行日志的解析,而dmdrs优先解析redo日志。
本文介绍了DMDRS的功能模块,数据同步的原理,以及dmdrs的部署和简单应用,方便读者快速上手dmdrs。
文章
阅读量
获赞
