达梦数据库部署veri数据对比工具

发布于:2025-06-14 ⋅ 阅读:(27) ⋅ 点赞:(0)

前提条件: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

达梦数据库社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台