在进行数据库数据的实时同步的时候,需要了解同步的结果是否正确,因此需要有数据对比工具进行数据的对比,并生成详细的对比报告,提供用户参考。
DMHS对比工具由三部分组成:源端 AGENT 服务器、目的端 AGENT 服务器和 VERI对比进程。每个 AGENT 服务器对应一个 Oracle 或 DM7 数据库实例。每次对比都会启动一个 VERI 对比进程,对比完成后自动退出,并生成对比报告。
运行对比工具之前,需要配置 AGENT 和 VERI,各配置项的详细说明如下:
AGENT 配置文件使用 XML 文件格式,默认文件为 agent.xml,配置示例如下:
<?xml version="1.0" encoding="utf-8"?>
<agent>
<port>5347</port>
<lang>ch</lang>
<max_session>50</max_session> #最大连接数,范围为[1, 10000]
<mode>0</mode> #0:动态对比锁表模式;1:动态对比闪回查询模式。仅仅在Oracle中有效。
<lock_nowait>1</lock_nowait> #动态对比上锁模式中对表上锁是否使用 nowait,1 表示使用;0 表示不使用。
<pwd_encipher>0</pwd_encipher> #配置连接数据库口令是否加密:1 表示密文;0:表示明文。密文通过 dmhs_console 工具的命令 pwd “xx”获得。
<dyn_wait_time>100</dyn_wait_time> #动态对比时,agent 和 DMHS 连接等待的时间,有效值:[0, 36000000], 单位:秒,默认为 100
<ignore_fetch_error>0</ignore_fetch_error> #从数据库查询表数据时,会报“快照过旧”的错误,导致表对比停止。该参数配置为 1,则可以忽略该报错继续取数据对比。仅对DM7/8 有效。0 表示关闭,默认为 0,有效值为 0 和 1。
<database> #Agent连接的数据库配置
<server>ora92</server>
<uid>test</uid>
<psw>数据库密码</psw>
<db_ssl_path></db_ssl_path>
<db_ssl_pwd></db_ssl_pwd>
<type>ORACLE11g</type>
</database>
</agent>
VERI 配置文件使用 xml 格式进行配置,默认文件为 veri.xml,配置示例如下:
<?xml version="1.0" encoding="utf-8"?>
<veri>
<lang>ch</lang> <!-- language: en or ch -->
<max_thr>40</max_thr> #最大线程对数,范围为[1, 10000]
<max_obj_thr>1</max_obj_thr> #最大对象对比线程个数,范围为[1, 10000]
<retry_times>0</retry_times> #AGENT 与 VERI 断连后重试次数,范围 [0, 100]
<gen_html>0</gen_html> #是否生成 html 报告:1 表示是,0 表示否。
<max_out_sync>100000</max_out_sync> #最大允许出错的行数,范围为[1, 10000000]
<pwd_encipher>0</pwd_encipher> #配置连接数据库口令是否加密:1 表示密文;0:表示明文。
<col_opt>0</col_opt> #是否对指定 jobfile 的情况进行取列优化,1:是;0:否。设置为 1之后,从数据库查询表的对比列的操作将放在对比线程中处理,提升并发性能。
<log_mode>0</log_mode> #是否生成单独的错误日志对比报告,1:是;0:否。
<sort_buf_size>1024</sort_buf_size> #排序缓冲区大小,有效值:[32, 262144],单位:MB。
<report_mode>0</report_mode> #对比报告的显示格式,0:列式显示;1:行式显示,默认为 0
<report_dir>F:\veri\report</report_dir>
<use_conn_pool>1</use_conn_pool> #是否启用连接池,1:是;0:否。设置为1表示数据库连接会缓存起来重复使用。
<max_conn_num>100</max_conn_num> #连接池最大连接数
<dmhs> <!-- dmhs_server for destination -->
<server_name>192.168.0.103</server_name>#执行端 IP
<port>5345</port>
<site_id>1</site_id> #DMHS 执行端对应的源端 CPT 的站点号
</dmhs>
<src>
<agent_server>192.168.0.104</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>数据库密码</db_pwd>
</odbc_str>
</src>
<dest>
<agent_server>192.168.0.103</agent_server>
<port>5347</port>
<db_type>DM7</db_type>
<trim_space>1</trim_space>
<odbc_str>
<driver> </driver>
<db_server>192.168.0.103</db_server>
<db_port></db_port>
<db_user>SYSDBA</db_user>
<db_pwd>数据库密码</db_pwd>
<db_ssl_path></db_ssl_path> #ssl加密
<db_ssl_pwd></db_ssl_pwd>
</odbc_str>
</dest>
</veri>
dmhs_veri 运行所在的机器必须安装 unixODBC,Oracle,DM7。
tnsnames.ora 的配置:
tnsnames.ora 文件存放在$ORACLE_HOME/network/admin 下。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = CentOS)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
unixODBC
配置:
配置
odbcinst
[ORACLE ODBC DRIVER]
Description = ODBC DRIVER FOR ORACLE
Driver = /home/oracle/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
Setup =
threading = 0
[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
Driver = /opt/dmdbms/bin/libdodbc.so
Setup = /lib/libdmOdbcSetup.so
threading = 0
odbc.ini
配置参:
[dm7-1]
Description = DM ODBC DSN
Driver = DM7 ODBC DRIVER
SERVER = 192.168.0.103
UID = SYSDBA
PWD = 自定义,且真实可用的密钥
TCP_PORT = 5236
[ora92]
Description = DM ODBC DSN
Driver = ORACLE ODBC DRIVER
SERVER = localhost
UID = TEST
PWD = 自定义,且真实可用的密钥
odbc
连接串要与
odbc.ini
配置对应。
VERI 配置 veri.xml、源端
AGENT
配置
agent.xml、目的端 AGENT
配置 agent.xml均可参考上述配置解说完成,未用到参数可不配置;
启动
AGENT
服务器
源端检查环境变量:
参考命令:env|grep LD_LIBRARY_PATH
启动源端代理进程:
将配置好的
agent.xml文件
放置在
AGENT
应用程序所在的文件夹中并启动代理进程。
./dmhs_veri_agent_ora
目的端检查环境变量:
参考命令:env|grep LD_LIBRARY_PATH
检查
LD_LIBRARY_PATH
中是否存在
DM7
库。
启动目的端代理服务器:
将 已配置好的目的端
agent.xml 文件
放置到
AGENT
应用程序所在的文件夹中。
./dmhs_veri_agent_dm7
启动对比进程进行对比
将
veri.xml
放置在
dmhs_veri
所在文件中,并检查
unixODBC
和 oracle 库路径是否在
LD_LIBRARY_PATH
中。
进行全模式静态对比:
./dmhs_veri jobname=job1 “table=(TEST.*==SYSDBA.*)” mode=NORMAL
进行全模式
FAST
对比:
./dmhs_veri jobname=job1 “table=(TEST.*==SYSDBA.*)” mode=FAST
进行单表对比:
./dmhs_veri jobname=job1 “table=(TEST.T1==SYSDBA.T1)” mode=NORMAL
补充:
一、DMHS 对比工具支持的数据类型:数值类型;字符类型;二进制数据类型;时间日期类型;大对象类型;不支持的数据类型:时区数据类型。
二、DMHS
对比工具对比支持以下对比类别:
1)
按照对比模式分为:静态对比、动态对比、快速对比和二次对比;
2)
按照是否使用键值对比分为:键值对比和非键值对比;
3)
动态对比按照对比表之间是否存在关联分为:普通对比和组表对比,前者表示表之间的 对比没有关联,相互独立;后者表示表之间存在关联,如外键引用,对比时关联表会在 相同的 SCN
下比较。组表对比只支持源代理数据库为
Oracle
的情况,且不支持
LONG 和 LONG RAW
数据类型。
4)
动态对比按照执行方式不同分为:锁表动态对比和闪回查询动态对比。普通对比可以使 用其中任意一种执行方式,组表对比只能使用闪回查询动态对比。在不支持闪回查询的 数据库对比中,默认使用锁表动态对比。按照是否使用键值对比分为:键值对比和非键 值对比;
注意:二次对比时,需对比的表中无主键且唯一索引包含空值时对比结果会有误差;表中无
主键且没有唯一索引的情况下,二次对比不会对大对象再次进行比对。
更多有关达梦数据库相关内容,可通过以下链接查看