AGENT:对比工具代理服务,主要用作数据获取,并计算行数据的 MD5,发送给对比模块。
VERI:对比校验进程,主要进行模式下对象对比,数据对比,并且生成对比报告。
系统主要分为对比代理服务和对比校验进程。对比代理服务分源对比代理服务和目的对比代理服务。对比代理服务的作用是从数据服务器取得数据记录,并取得数据记录的 MD5 值发送到对比校验进程进行校验。对比校验进程对数据进行比对后,直接访问源数据库服务器和目的数据库服务器,生成详细的对比报告。系统结构如图所示:
tnsnames.ora 文件存放在$ORACLE_HOME/network/admin 下
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.239.134)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.239.134)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
yum -y install unixODBC
odbcinst -j #查看配置文件目录
vim /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DB=DM8
DRIVER = /dm8/bin/libdodbc.so
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver =/home/oracle/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
Threading = 0
vim /etc/odbc.ini
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = localhost
UID=system
PWD = Tebie123.
Servername = orcl
PORT = 1521
[dm8]
Description = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
vim ~/.bash_profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dmhs/bin:$ORACLE_HOME:$ORACLE_BASE:/etc:/dm8/bin
<?xml version="1.0" encoding="utf-8"?>
<veri>
<lang>en</lang> <!-- language just at en or ch -->
<max_thr>40</max_thr>
<!-- <dmhs> <!-- dmhs_server for destionation -->
<!-- <server_name>192.168.238.134</server_name>
<port>5345</port>
<site_id>1</site_id>
</dmhs> --> <!-- 这个是动态对比时,需要添加的内容,添加的是dmhs节点信息 -->
<src> <!-- 源端agent的配置 -->
<agent_server>192.168.239.134</agent_server>
<port>5347</port> <!-- 这是agent的端口 -->
<db_type>ORACLE11g</db_type>
<odbc_str>
<!-- <dsn>ORACLE</dsn> -->
<db_server>192.168.239.134:/orcl</db_server>
<db_user>system</db_user>
<db_pwd>Tebie123.</db_pwd>
</odbc_str>
</src>
<dest> <!-- 目的端agent的配置 -->
<agent_server>192.168.239.3</agent_server>
<port>5347</port> <!-- 这是agent的端口 -->
<db_type>DM8</db_type>
<odbc_str>
<!-- <dsn>DM8</dsn> -->
<db_server>192.168.239.3</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
</odbc_str>
</dest>
</veri>
<?xml version="1.0" encoding="utf-8"?>
<agent>
<port>5347</port> <!-- 这是agent的端口 -->
<lang>en</lang>
<max_session>100</max_session>
<!-- <mode>0</mode> --> <!-- 这是动态对比时,需要添加mode控制参数。0:动态对比锁表模式;1:动态对比闪回查询模式。仅仅在Oracle中有效。 -->
<database>
<type>Oracle11g</type>
<server>orcl</server>
<uid>system</uid>
<psw>Tebie123.</psw>
<!-- <port></port> 默认端口时可以不写数据库端口,不是默认时写 -->
</database>
</agent>
<agent>
<port>5347</port> <!-- 这是agent的端口 -->
<lang>en</lang>
<max_session>100</max_session>
<!-- <mode>0</mode> --> <!-- 这是动态对比时,需要添加mode控制参数。0:动态对比锁表模式;1:动态对比闪回查询模式。仅仅在Oracle中有效。 -->
<database>
<type>DM8</type>
<server>192.168.239.3</server>
<uid>SYSDBA</uid>
<psw>SYSDBA</psw>
<port>5236</port> <!-- 此处port是dm8的监听端口 -->
</database>
</agent>
7.1源端:
./dmhs_veri_agent_ora agent.xml
7.2 目的端:
./dmhs_veri_agent_dm8 agent.xml
./dmhs_veri "TABLE=(SYSTEM.T2==SYSTEM.T2)" mode=normal
#普通对比
./dmhs_veri "TABLE=(SYSTEM.*==SYSTEM.*)" mode=normal
#快速对比
./dmhs_veri "TABLE=(SYSTEM.*==SYSTEM.*)" mode=fast
#动态对比
./dmhs_veri "TABLE=(SYSTEM.*==SYSTEM.*)" mode=dyn
./dmhs_veri “table=((SYSTEM.T1,SYSTEM.T2)==(SYSDBA.T1,SYSDBA.T2))” MODE=DYN