达梦数据对比工具 veri
数据库进行实时同步的时候,需要确认同步双方的数据是否一致,这时就需要工具对双方的数据库数据进行对比。达梦数据对比工具可以对数据库中指定的数据进行对比,并生成详细的对比报告,但是不会对数据进行任何操作,只是进行提示作用,目前对比工具支持对比的数据库有:Oracle、DM6、DM7、DM8、KingBase、MySQL、DB2、PostgreSQL
veri 工具包括两部分:对比代理服务 agent 和对比校验进程 veri。agent 分源端和目的端两部分,作用是从数据库获取数据记录,并取得数据记录的 MD5 值发送到 veri 进行校验;veri 可以部署在源端,或者目的端,或者第三方服务器上,作用是对数据进行比对后,直接访问源数据库服务器和目的数据库服务器,生成详细的对比报告
环境
由于没有 Oracle对应的 DMHS 版本,因此两部服务器都是安装部署了 DM8 作为对比的数据库
服务器 | 数据库类型 | IP | dmhs_veri |
---|---|---|---|
源端 | DM8 | 192.168.244.132 | agent, veri |
目的端 | DM8 | 192.168.244.136 | agent |
安装 ODBC
注意:只有部署了 veri 的服务器才需要安装 ODBC,且 unixODBC 版本需要使用 2.3.0 及以上的版本
以 root 身份执行以下命令
yum install unixODBC -y
odbcinst -j
修改 odbcinst.ini 和 odbc.ini 文件
vi /etc/odbcinst.ini
###增加以下内容
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dmdbms/bin/libdodbc.so
###
vi /etc/odbc.ini
###增加以下内容
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
以 dmdba 身份执行 isql 测试连接是否正常
agent 组件配置
agent 配置文件在源端和目的端都要进行配置,因为本次试验双方都是 DM8 数据库,因此双方的 agent.xml 文件一样即可
以 dmdba 身份创建配置文件
[dmdba@192 bin]$ vi agent.xml
agent 配置文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<agent>
<port>5347</port>
<lang>ch</lang>
<max_session>10</max_session>
<mode>0</mode>
<database>
<type>DM8</type>
<server>127.0.0.1</server>
<uid>SYSDBA</uid>
<psw>SYSDBA</psw>
<port>5236</port>
</database>
</agent>
veri 组件配置
veri 可以部署在任意一台可以访问到 agent 的服务器上,本次试验中 veri 部署在源端 192.168.244.132
以 dmdba 身份创建配置文件
[dmdba@192 bin]$ vi veri.xml
veri 配置文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<veri>
<lang>en</lang>
<max_thr>2</max_thr>
<src>
<agent_server>192.168.244.132</agent_server>
<port>5347</port>
<db_type>DM8</db_type>
<odbc_str>
<db_server>192.168.244.132</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
</odbc_str>
</src>
<dest>
<agent_server>192.168.244.136</agent_server>
<port>5347</port>
<db_type>DM8</db_type>
<odbc_str>
<db_server>192.168.244.136</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
</odbc_str>
</dest>
</veri>
数据对比工具启动
在源端和目的端分别启动 agent
[dmdba@192 bin]$ ./dmhs_veri_agent_dm8 agent.xml
启动 veri
[dmdba@192 bin]$ ./dmhs_veri conf=veri.xml "table=(SYSDBA.*==SYSDBA.*)"
如图,生成的对比报告为 /home/dmdba/dmhs/bin/report/SYSDBA==SYSDBA_20230831_001/veri_report_SYSDBA==SYSDBA.txt
,报告结果如下
以上是双方数据一致的情况,现在在源端插入一条数据,模拟双方数据不一致,得到的报告结果如下
得知在 source database 有一条数据没有在 dest 中出现,验证成功
备注
SYSDBA 模式下全部表对比
./dmhs_veri conf=veri.xml "table=(SYSDBA.*==SYSDBA.*)"
指定表对比
./dmhs_veri conf=veri.xml "table=(SYSDBA.TEST1==SYSDBA.TEST1)"
若有主键,使用键值对比方式(默认方式)
./dmhs_veri conf=veri.xml "table=(SYSDBA.*==SYSDBA.*)" ues_key=1
使用非键值对比
./dmhs_veri conf=veri.xml "table=(SYSDBA.*==SYSDBA.*)" use_key=0
快速对比
./dmhs_veri conf=veri.xml "table=(SYSDBA.*==SYSDBA.*)" mode=FAST
达梦在线服务平台:https://eco.dameng.com