达梦数据对比工具

1. 概述

1.1 作用

在进行数据库数据的实时同步的时候,需要了解同步的结果是否正确,因此需要有数据对比工具进行数据的对比,并生成详细的对比报告,提供用户参考。对比工具仅仅生成报告,对数据不一致的情况不做任何操作,仅仅提示用户发生了数据不一致情况,并且告诉用户那
些数据不一致。

1.2 VERI产品构成

系统主要分为对比代理服务和对比校验进程。对比代理服务分源对比代理服务和目的对比代理服务,对比代理服务的作用是从数据服
务器取得数据记录,并取得数据记录的 MD5 值发送到对比校验进程进行校验。对比校验进程对数据进行比对后,直接访问源数据库服务器和目的数据库服务器,生成详细的对比报告。系统结构如图所示。

达梦systimestamp 达梦数据库价格_达梦systimestamp

术语解释如下:

  • AGENT:对比工具代理服务,主要用作数据获取,并计算行数据的 MD5,发送给对比模块。
  • VERI :对比校验进程,主要进行模式下对象对比,数据对比,并且生成对比报告。
  • DMHS:达梦数据实时同步工具。
  • 动态对比:对比工具与 DMHS 协同工作,保证源表与目的表都是执行完相同事务后对查询结果集进行对比。
  • 静态对比:对比工具单独对比,没有 DMHS 的协同。
  • 键值对比:按照主键或者唯一索引值排序进行对比。
  • 非键值对比:按照行数据 MD5 值排序后进行对比
  • 二次确认对比:在对比过程中,由于 DMHS 同步的时间差,第一次对比会存在不一致,因此需要针对第一次对比的结果,再次进行第二次确认对比,确定 DMHS 同步是否存在延迟或失败。
  • 快速对比:仅仅对表进行记录行数的对比。
  • 锁表动态对比:动态对比的一种,通过锁表控制源表与 DMHS 同步数据一致。
  • 闪回查询动态对比:动态对比的一种,通过闪回查询直接取得某 SCN 的结果集,仅仅适用 Oracle 库中不包w含 LONG, LONG RAW 类型的表。

2. 配置

2.1 AGENT 的配置

AGENT 配置文件使用 XML 文件格式,默认文件为 agent.xml,配置示例如下:

<?xml version="1.0" encoding="utf-8"?>
<agent>
<port>5347</port>
 <lang>ch</lang>
<max_session>50</max_session>
<mode>0</mode>
 <lock_nowait>1</lock_nowait>
 <pwd_encipher>0</pwd_encipher>
 <dyn_wait_time>100</dyn_wait_time>
 <ignore_fetch_error>0</ignore_fetch_error>
<database>
<server>ora92</server>
<uid>test</uid>
<psw>test</psw>
 <db_ssl_path></db_ssl_path>
 <db_ssl_pwd></db_ssl_pwd>
<type>ORACLE11g</type>
</database>
</agent>

2.2 VERI 的配置

VERI 配置文件使用 xml 格式进行配置,默认文件为 veri.xml,配置示例如下:

<?xml version="1.0" encoding="utf-8"?>
<veri>
 <lang>ch</lang> <!-- language: en or ch -->
 <max_thr>40</max_thr>
 <max_obj_thr>1</max_obj_thr>
 <retry_times>0</retry_times>
 <gen_html>0</gen_html>
 <max_out_sync>100000</max_out_sync>
 <pwd_encipher>0</pwd_encipher>
 <col_opt>0</col_opt>
 <log_mode>0</log_mode>
 <sort_buf_size>1024</sort_buf_size>
 <report_mode>0</report_mode>
<report_dir>E:\work\veri\veri\report</report_dir>
<use_conn_pool>1</use_conn_pool>
<max_conn_num>100</max_conn_num>
 <dmhs> <!-- dmhs_server for destination -->
 <server_name>223.254.19.93</server_name>
 <port>5345</port>
 <site_id>1</site_id>
 </dmhs><src>
 <agent_server>223.254.19.92</agent_server>
 <port>5347</port>
 <db_type>ORACLE11g</db_type>
<trim_space>1</trim_space>
 <odbc_str>
 <driver> </driver>
<db_server>ora92</db_server><db_port></db_port>
< db_user >test</db_user>
 <db_pwd>test</db_pwd>
 </odbc_str>
 </src>
 <dest>
 <agent_server>223.254.19.93</agent_server>
 <port>5347</port>
 <db_type>DM7</db_type>
<trim_space>1</trim_space>
 <odbc_str>
 <driver> </driver>
<db_server>223.254.19.93</db_server>
<db_port></db_port>
<db_user>SYSDBA</db_user>
 <db_pwd>SYSDBA</db_pwd>
 <db_ssl_path></db_ssl_path>
 <db_ssl_pwd></db_ssl_pwd>
 </odbc_str>
 </dest>
</veri>

2.3 作业文件配置

VERI 启动参数不携带 JOBFILE 选项,则运行过程中自动生成任务配置。任务配置文件名称可以自定义,也可以由其他工具,例如 WEB 生成,后缀名为 xml。这里假设为 j1.xml,示例如下:

<?xml version="1.0" encoding="GB2312" ?>
<job>
<name>j1</name>
<table_list>
 <table_info>
 <table_name>DMHS.T1==SYSDBA.T1</table_name>
 <col_map_flag>3</col_map_flag>
 <tab_cmp_flag>0</tab_cmp_flag>
<row_partition_src>
<![CDATA[ "C1" < 1000]]>
</row_partition_src>
<row_partition_dest>
<![CDATA[ "C1" < 1000]]>
</row_partition_dest>
 <key_list> <!--如果没有key,则该项省略-->
<col>C1==D1</col>
 </key_list>
 <col_list>
 <col>C1==D1</col>
<col>C2==D2</col>
<col>C3==D3</col>
 </col_list>
 </table_info>
 </table_list>
</job>

3. 部署和执行

DMHS 对比工具由三部分组成:源端 AGENT 服务器、目的端 AGENT 服务器和 VERI 对比进程。每个 AGENT 服务器对应一个 Oracle 或 DM 数据库实例。每次对比都会启动一 个 VERI 对比进程,对比完成后自动退出,并生成对比报告。

3.1 部署源端 AGENT

在运行 AGENT 之前需要 成功配置 agent.xml,该文件名用户可以自定义,配置完成后,按照如下方式启动源端 AGENT 服务器:

Windows平台:

Oracle: dmhs_veri_agent_ora.exe d:\dmhs_veri_o2d\agent_src.xml DM7:
dmhs_veri_agent_dm7.exe d:\dmhs_veri_o2d\agent_dst.xml

Linux平台:

Oracle: ./dmhs_veri_agent_ora agent_src.xml DM7:
./dmhs_veri_agent_dm7 agent_dst.xml

3.2 部署目的端 AGENT

目的端 AGENT 服务器的部署和源 AGENT 类似。配置文件 agent.xml 中的代理数据库配置信息为目的端 AGENT 服务器对应的数据库实例连接信息。其中 mode 和 lock_nowait两个配置项不起作用。

目的端 AGENT 服务器与源端 AGENT 服务器相互独立,可以部署在同一台机器上,也可以部署在不同机器。

3.3 VERI 对比执行

在源端和目的端 AGENT 服务器部署成功后,还需要部署 VERI。部署 VERI 时,首先 需要配置 veri.xml 文件,该文件名不允许修改,且要求该文件放在 dmhs_veri 执行文件的工作目录下。

配置完成后,按照如下命令行方式执行对比:

dmhs_veri 参数名1=参数值1 参数名2=参数值2

4. 离线比对

为了适应不同的应用环境,比如源库与目的库隔离,不能进行双向通信时,对比工具还支持 AGENT 在源端获取表记录的 MD5 值,并将 MD5 值存入文件中,然后手动将 MD5 文件目录拷贝的 VERI 一端,再由 VERI 不连接数据库的情况下分别将源端与目的端已经取好的 MD5 值进行比对。该功能仅支持 Oracle、DM7、DM8。

5. 详细报告入库

数据库数据比对时,由于差异较多,无法进行有效的差异管理。对比工具提供了一种基于数据库的详细报告入库功能,对比总体报告以文本形式存储在磁盘中;对于有差异的表, 则将差异数据插入到一个用于详细报告差异数据存储的数据库。

5.1 相关配置参数:

  • 详细报告库的指定,在 veri.xml 中 report_db 指定;
  • 报告缓存大小:在 veri.xml 中 report_buf_size 指定;
  • 详细报告连接数限制:在 veri.xml 中 max_conn_num 指定, 含所有 odbc 连接,包括源库、 目的库、详细报告库;
  • 详细报告并发读取数:在 veri.xml 中 report_group 指定;
  • 只需要 rowid 入库,dmhs_veri 命令中指定 get_raw_data=0

5.2 使用步骤

1)VERI对比工具中增加 report_db 参数,当详细报告入库为DM7/DM8时还可以指定模式,参数名称为 schema,默认为用户名;

2)根据源端、目的端数据库类型,如果有差异数据时自动创建详细报告表,命名规则如下:
源端:
<作业名_日期_编号>-<对比序号>S<对比表序号>-<源表模式名.表名>
目的端:
<作业名_日期_编号>-<对比序号>D<对比表序号>-<目的端模式名.表名>
长度限制:当详细库为 DM7/DM8 时,超过 128 会被截断;当详细库为 ORACLE 时,超过 30 会被截断;dmhs_veri 命令执行对比时 jobname=<名称尽量短>。

3)详细报告表比源/目标表多一个 VROWID 列,用于记录原始 ROWID 值

4)ODBC 批量绑定 200 从源端/目的端获取,同时以批量绑定 200 提交到报告库;

参考资料:https://eco.dameng.com