达梦数据对比工具
1. 概述
1.1 作用
在进行数据库数据的实时同步的时候,需要了解同步的结果是否正确,因此需要有数据对比工具进行数据的对比,并生成详细的对比报告,提供用户参考。对比工具仅仅生成报告,对数据不一致的情况不做任何操作,仅仅提示用户发生了数据不一致情况,并且告诉用户那
些数据不一致。
1.2 VERI产品构成
系统主要分为对比代理服务和对比校验进程。对比代理服务分源对比代理服务和目的对比代理服务,对比代理服务的作用是从数据服
务器取得数据记录,并取得数据记录的 MD5 值发送到对比校验进程进行校验。对比校验进程对数据进行比对后,直接访问源数据库服务器和目的数据库服务器,生成详细的对比报告。系统结构如图所示。
术语解释如下:
- 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 提交到报告库;