一、DMDRS和DMDVS产品简介
达梦数据复制软件(简称DMDRS)是一种用于同构数据库、异构数据库以及各种数据管理系统之间的数据复制软件。DMDRS采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多种场景下的数据复制业务需求。基于数据复制业务的应用场景,DMDRS提供数据迁移、数据同步、数据分发和数据转换等功能,而且数据同步功能还支持一对一、双向、一对多、多对一、级联同步、环形同步和DMDRS主备等多种同步拓扑结构。
达梦数据校验软件(简称DMDVS)是一种用于同构或异构数据库数据差异识别,并支持对差异数据进行修复、备份与还原的数据校验软件。DMDVS采用模块化的设计,实现多功能的数据校验服务,满足静态数据校验、动态数据校验、单向数据校验、中转数据校验和分布式数据校验等多种场景下的数据校验业务需求。
DMDVS是达梦的新产品,所以比起DRS,大家对DVS可能没什么了解,在本博客中我就不再介绍DRS了,之前在别的博客中介绍过了。今天主要就是介绍一下如何在DRS运行过程中,使用DVS进行动态的数据对比。
二、静态数据对比
在介绍本博客的重点即动态数据对比之前,先用一个简单的静态对比带大家了解一下DMDVS的使用方法。
2.1 启动dvs服务
./dvs_serverd start
(启动脚本要自己配,相信大家都会,就bin目录下cp service_template/TemplateService嘛)
2.2进入控制台
./drcsl dvs.xml
先连接
connect
输入两台数据库信息来添加校验数据库
CMP ADD DB <db_type> <db_info_name> "<server>" <user> <pwd> [<port>] [<db_name>][<server_name>] [<ssl_path> <ssl_pwd>]
比如
cmp add db dm8 dm_a “主调ip” SYSDBA 密码 5236
cmp add db dm8 dm_b “被调ip” SYSDBA 密码 5236
2.3静态校验指令
cmp job jobname=test1 db1 db2 "SYSDBA.*==SYSDBA.*"
2.4查看报告
show report test1
很简单对吧,下面就来看重点
三、动态数据校验
3.1概述
动态数据校验主要应用于在使用DMDRS服务进行数据增量同步的同时校验数据一致性的场景。动态数据校验通过指定源DMDRS的连接信息与源DMDRS服务建立连接,获取需要校验的源数据库信息,由源DMDRS通知目标DMDRS将目标数据库信息发送给DMDVS,再由DMDVS校验当前已同步的数据的一致性。
3.2准备
动态数据校验仅支持DM8和Oracle 10g及以上版本的数据库使用。使用该功能前,需要开启数据库的闪回功能,即ENABLE_FLASHBACK 置为 1。
DM8数据库开启闪回功能后,还需设置“dm.ini”文件的TRX_VIEW_MODE和TRX_VIEW_POLICY参数值为1。
3.3运行
(1)首次执行动态数据校验作业。
DCMP JOB [JOBNAME=<job_name>] "<cpt_conn_info>" "<cpt_cmp_table>" [<mask>]
cpt_conn_info:
CPT模块的IP、端口号以及CPT模块的名称组成的连接信息,格式为"IP:Port[:CPT_NAME]"
注意:端口号不是数据库端口号,是drs配置文件中的mgr_port
cpt_cmp_table:
源数据库需要进行校验的表信息。支持模式下所有表的校验,也支持模式下的单张表或者多张表的校验
比如:
DCMP JOB jobname=dcmp_person "192.168.160.161:5347:cpt_dm8" "PERSON.*"
(这张图是我测试RESOURCES表的图,PERSON的没截,大家知道这个意思就好)
(2)重复执行动态数据校验作业。
DCMP JOB JOBNAME=<job_name>
(3)查看报告
SHOW REPORT JOBNAME=<job_name>
(4)我们来测试一下
原来的数据(不要在意性别,随机生成的)
新插入5行数据
数据成功同步到目的端
这时再直接重复运行校验任务,结果如下
可以看到当前已同步的数据是一致的
看到这大家可能觉得这和多次的静态数据对比没什么区别,但是大家可以思考一下,上面的例子是数据量比较小的情况,如果数据量很大,那同步就需要花费一定时间,如果我们想知道已经同步了的增量数据的一致性,即在数据同步的过程中进行数据的校验,就需要利用动态数据校验。
四、遇到的一些问题
4.1执行dcmp校验任务后dvs服务直接停了,执行show task会发现所有任务只有开始时间,没有结束时间
这个应该是内存的问题,我换了台虚拟机就可以了
4.2执行动态数据校验任务成功后,想看报告却有如下报错
我们可以在bin/log/dvs_时间.log中看到如下错误信息
这是因为在部署 DMDVS 时需配置动态库依赖路径,该报错一般都是需要的数据库驱动路径没加到环境变量里面导致,通过 ldd 检查动态库文件 libdvora.so 和 libdvdm.so 发现存在缺失
我们可以用find / -name libclntsh.so.11.1的方式找到该文件路径并把它添加到动态库文件中,然后重启DMDVS即可
社区地址:https://eco.dameng.com