达梦数据库部署veri数据对比工具
前提条件:dmhs同步复制安装完成:《单机部署dmhs同步复制(DM8—>DM8)》,在这个环境下部署veri。
一、概念
在进行数据库数据的实时同步的时候,需要了解同步的结果是否正确,因此需要有数据对比工具进行数据的对比,并生成详细的对比报告,提供用户参考。对比工具仅仅生成报告, 对数据不一致的情况不做任何操作,仅仅提示用户发生了数据不一致情况,并且告诉用户那些数据不一致。
二、veri构成
系统主要分为对比代理服务和对比校验进程。对比代理服务分源对比代理服务和目的对比代理 服务。对比代理服务的作用是从数据服务器取得数据记录,并取得数据记录的 MD5 值发送到对比校验进程进行校验。对比校验进程对数据进行比对后,直接访问源数据库服务器和目的数据库服务器,生成详细的对比报告。
术语解释如下:
这张图片展示了一个数据验证(VERI)流程的架构图,涉及源数据库、目标数据库以及相关的服务和配置文件。以下是详细解析:
1. 组件说明
- AGENT服务:
-
- 在源数据库和目标数据库上分别运行的代理服务。
- 对比工具代理服务,主要用作数据获取,并计算行数据的 MD5,发送给对比模块。
- 源数据库上的 AGENT 服务读取
agent.xml
配置文件,并与源数据库交互。 - 目标数据库上的 AGENT 服务同样读取
agent.xml
配置文件,并与目标数据库交互。
- 源数据库:
-
- 存储原始数据的数据库系统。
- 通过虚线箭头与 AGENT 服务进行数据交互。
- 目标数据库:
-
- 数据同步或迁移后的目标存储系统。
- 同样通过虚线箭头与 AGENT 服务进行数据交互。
- VERI进程:
-
- 中央验证进程,负责协调整个验证过程。
- 对比校验进程,主要进行模式下对象对比,数据对比,并且生成对比报告。
- 读取
veri.xml
配置文件,控制验证任务的执行。
2. 流程解析
2.1、命令方向(实线箭头)
- 从 VERI 进程到 AGENT 服务:
-
- VERI 进程向源数据库和目标数据库上的 AGENT 服务发送命令,指示它们执行特定的操作(如数据读取、写入等)。
- 从 AGENT 服务到数据库:
-
- AGENT 服务根据收到的命令,与对应的数据库进行交互,执行相应的操作。
2.2、数据方向(虚线箭头)
- 从源数据库到 AGENT 服务:
-
- 源数据库将数据传输给源数据库上的 AGENT 服务。
- 从 AGENT 服务到 VERI 进程:
-
- 源数据库上的 AGENT 服务将读取的数据传递给 VERI 进程。
- 从 VERI 进程到 AGENT 服务:
-
- VERI 进程处理完数据后,将结果或指令传递给目标数据库上的 AGENT 服务。
- 从 AGENT 服务到目标数据库:
-
- 目标数据库上的 AGENT 服务将数据写入目标数据库。
3. 配置文件的作用
agent.xml
:
-
- 位于源数据库和目标数据库上,为各自 AGENT 服务提供配置信息。
- 包含连接数据库的参数、数据处理规则等。
veri.xml
:
-
- 位于 VERI 进程中,为整个验证过程提供全局配置。
- 包含验证规则、数据对比逻辑、任务调度等信息。
4、DMHS:达梦数据实时同步工具,本产品包含以下功能:
- 动态对比:对比工具与 DMHS 协同工作,保证源表与目的表都是执行完相同事务后对查询结果集进行对比。
- 静态对比:对比工具单独对比,没有 DMHS 的协同。
- 键值对比:按照主键或者唯一索引值排序进行对比。
- 非键值对比:按照行数据 MD5 值排序后进行对比。
- 二次确认对比:在对比过程中,由于 DMHS 同步的时间差,第一次对比会存在不一致,因此需要针对第一次对比的结果,再次进行第二次确认对比,确定 DMHS 同步是否存在延迟或失败。
- 快速对比:仅仅对表进行记录行数的对比。
- 锁表动态对比:动态对比的一种,通过锁表控制源表与 DMHS 同步数据一致。
- 闪回查询动态对比:动态对比的一种,通过闪回查询直接取得某 SCN 的结果集,仅仅适用 Oracle 库中不包 含 LONG, LONG RAW 类型的表。
三、查看链路延迟信息
在对比修复前需要检查该链路是否正常同步,排除因延迟导致对比不一致的情况。在源端控制台输入cpt或者目的端输入exec即可查看,重点数据库状态和检查点时间、日志时间。
在同步链路目的端控制台,输入lag可以查看表延迟情况。
存在延迟情况时,在源端和目的端日志进行排查,搜索关键字ERROR进行查看。
四、执行对比
DMHS对比工具由三部分组成:源端AGENT服务器、目的端AGENT服务器和VERI对比进程。每次对比都会启动一个VERI对比进程,对比完成后自动退出,并生成对比报告。
对数据不一致的情况不做任何操作,仅仅提示用户发生了数据不一致情况。AGENT、VERI和相关产品手册于DMHS完整安装包可以找到,AGENT和VERI位于bin目录中,操作时复制三个bin目录,用来启动AGENG、VERI进程
1、AGENT配置:
目的端AGENT服务器与源端AGENT服务器相互独立,可以部署在同一台机器上,也可以部署在不同机器,这里分开部署,源端AGENT部署在源dmhs上,目的端AGENT部署在目的端dmhs上,配置完记得启动服务。
1.1、目的端配置(192.168.52.26)可参考如下:
su - dmdba
cd /dm8/dmhs
cp -r bin dest-agent
cd dest-agent
vim agent.xml
<?xmlversion="1.0" encoding="utf-8" standalone="no"?>
<agent><port>5347</port><lang>en</lang><mode>0</mode><max_session>25</max_session><worker_thr>4</worker_thr><max_buf_size>1024</max_buf_size><database><server>192.168.52.26</server><uid>APP</uid> <psw>Dameng123</psw><port>5236</port><type>DM8</type></database>
</agent>
注意:这一点内容复制时候,一定要保证格式的正确;不然启动服务会出现下图报错
启动服务
./dmhs_veri_agent_dm8 agent.xml
格式正确后的成功示例:
1.2、源端配置(192.168.52.25)可参考如下:
su - dmdba
cd /dm8/dmhs
cp -r bin source-agent
cd source-agent
vim agent.xml
<?xmlversion="1.0" encoding="utf-8" standalone="no"?>
<agent><port>5347</port><lang>en</lang><mode>0</mode><max_session>25</max_session><worker_thr>4</worker_thr><max_buf_size>1024</max_buf_size><database><server>192.168.52.25</server><uid>APP</uid><psw>Dameng123</psw><port>5236</port><type>DM8</type></database>
</agent>
注意:这一点内容复制时候,一定要保证格式的正确;不然启动服务会出现下图报错
1.3、启动服务
./dmhs_veri_agent_dm8 agent.xml
2、veri配置(192.168.52.25):
在源端和目的端AGENT服务器部署成功后,还需要部署VERI。部署VERI时,需要配置unixODBC,其次,需要配置veri.xml文件,要求该文件放在dmhs_veri执行文件的工作目录下,注意不要在生产服务器上部署VERI以及业务高峰期进行对比操作(在第三台机器上去对比)。
2.1、部署ODBC:
参考文档:《ODBC连接DM数据库》
2.2、配置veri:
su - dmdba
cd /dm8/dmhs
cp -r bin veri
cd veri
vim veri.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<veri><lang>en</lang><max_thr>2</max_thr><src><agent_server>192.168.52.25</agent_server><port>5347</port><db_type>DM8</db_type><odbc_str><db_server>192.168.52.25</db_server><db_port>5236</db_port><db_user>APP</db_user><db_pwd>Dameng123</db_pwd></odbc_str></src><dest><agent_server>192.168.52.26</agent_server><port>5347</port><db_type>DM8</db_type><odbc_str><db_server>192.168.52.26</db_server><db_port>5236</db_port><db_user>APP</db_user><db_pwd>Dameng123</db_pwd></odbc_str></dest>
</veri>
代码解析
2.3、配置对比文件,对比文件名字为job_all.xml
vim job_all.xml
<?xml version="1.0" encoding="utf-8"?>
<job><name>dmhs_job_crt_2025042218</name><table_list><table_info><table_name>APP.STUDENTS==APP.STUDENTS</table_name></table_info></table_list>
</job>
2.4、启动服务
快速对比(只统计数据量)
./dmhs_veri jobfile=job_all.xml mode=fast
普通对比(一般采用该方法对比,遇到数据变动比较大的表,单独进行对比)
./dmhs_veri jobfile=job_all.xml mode=normal
动态对比(会锁表,除非业务允许)
./dmhs_veri jobfile=job_all.xml mode=dyn待对比结束后,查看对比记录结果即可。
五、执行对比时出现常见报错:
如果执行对比的时候遇到这个报错:./dmhs_veri: error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory
1、报错解决:
1.1、查找名字为 libodbc.so.1
find / -name "libodbc.so.1"
找到的文件一般在/usr/local/lib目录下
1.2、配置环境变量:
su - dmdba
vim ~/.bash_profile
追加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
重载环境变量:
source ~/.bash_profile
1.3、再次启动;
cd /dm8/dmhs/veri快速对比(只统计数据量)
./dmhs_veri jobfile=job_all.xml mode=fast
普通对比(一般采用该方法对比,遇到数据变动比较大的表,单独进行对比)
./dmhs_veri jobfile=job_all.xml mode=normal
动态对比(会锁表,除非业务允许)
./dmhs_veri jobfile=job_all.xml mode=dyn待对比结束后,查看对比记录结果即可。
1.4、对比记录文件
1.5、查看该 .txt 文件里面内容
cat /dm8/dmhs/veri/report/dmhs_job_crt_2025042218_20250422_001/veri_report_dmhs_job_crt_2025042218.txt
这里对比数据是正确的
2、对比数据不一致,进行修复
当进行数据对比,源端数据和目的端数据不一样时
执行下面的操作进行修复
2.1、上传修复工具压缩包到/opt目录
2.2、解压并移动文件到veri对比工具的执行目录下(root用户操作)
cd /opt
unzip /opt/veri_data_repair_20230926.zip
mv /opt/veri_data_repair/* /dm8/dmhs/veri
chown -R dmdba:dinstall /dm8/dmhs/veri
3、执行命令修复数据,保持源端和目的端数据一致
su - dmdba
cd /dm8/dmhs/veri
java -jar veri_data_repair.jar veri.xml job_all.xml /dm8/dmhs/veri/report/dmhs_job_crt_2025042218_20250516_001/detail_dmhs_job_crt_2025042218
# veri_data_repair.jar修复工具
# veri.xml是veri的配置文件
# job_all.xml 是对比文件
# /dm8/dmhs/veri/report/dmhs_job_crt_20240702_20240705_005/detail_dmhs_job_crt_20240702是对比报告,由veri对比工具生成的
java -jar veri_data_repair.jar veri.xml job_all.xml /dm8/dmhs/veri/report/dmhs_job_crt_2025042218_20250516_001/detail_dmhs_job_crt_2025042218
4、修复成功后,去查看源端和目的端的数据是否已经一致,或者再次使用veri对比工具去对比,看看是否一致。
4.1、再次对比
./dmhs_veri jobfile=job_all.xml mode=normal
4.2、查看文件
cat /dm8/dmhs/veri/report/dmhs_job_crt_2025042218_20250516_002/veri_report_dmhs_job_crt_2025042218.txt
达梦数据库社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台