1、拷贝达梦软件bin目录到Oracle服务器(root用户) 压缩Linux rh6 x86版本的达梦数据库bin目录,例如压缩文件为dmbin.tar.gz,将文件拷贝到Oracle服务器指定目录并解压(如:/home/oracle/dmbin),给目录/home/oracle/dmbin授予相关权限和用户组
1 chown -R oracle:oinstall /home/oracle/dmbin
2、配置ODBC连接Oracle数据库 (1)上传unixODBC源码文件,解压,编译安装(root用户)
1 2 3 4 5 6 tar -zxvf unixODBC-2.3.7.tar.gz cd unixODBC-2.3.7 ./configure --prefix=/usr/local/unixODBC-2.3.7 --includedir=/usr/include --libdir=/usr/lib --bindir=/usr/bin --sysconfdir=/etc --enable-gui=no make make install ldconfig
安装成功后,unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。
(2)查看odbc版本,查看配置文件路径(root用户)
1 2 odbc_config --version odbcinst -j
(3)配置odbc.ini和odbcinst.ini(root用户)
1 2 3 4 5 vi /etc/odbcinst.ini [Oracle] Description = ODBC DRIVER FOR ORACLE Driver = /oracle/app/oracle/product/19.3.0/db/lib/libsqora.so.19.1 Threading = 0
注意检查是否配置环境变量,主要为$ORACLE_HOME/lib是否配置
1 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib
查看动态库依赖关系,确保没有not found的依赖库,否则建议使用cp或做软链接的方式对缺失的动态依赖库进行补充,例如libclntsh.so.19.1和libodbcinst.so.2经常会找不到,ln -s source target创建软链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ldd /oracle/app/oracle/product/19.3.0/db/lib/libsqora.so.19.1 linux-vdso.so.1 => (0x00007ffd3a095000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f86b275e000) libm.so.6 => /lib64/libm.so.6 (0x00007f86b245c000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f86b2240000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f86b2026000) librt.so.1 => /lib64/librt.so.1 (0x00007f86b1e1e000) libaio.so.1 => /lib64/libaio.so.1 (0x00007f86b1c1c000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f86b1a02000) libclntsh.so.19.1 => /oracle/app/oracle/product/19.3.0/db/lib/libclntsh.so.19.1 (0x00007f86ad9f4000) libclntshcore.so.19.1 => /oracle/app/oracle/product/19.3.0/db/lib/libclntshcore.so.19.1 (0x00007f86ad454000) libodbcinst.so.2 => /lib/libodbcinst.so.2 (0x00007f86ad239000) libc.so.6 => /lib64/libc.so.6 (0x00007f86ace6b000) /lib64/ld-linux-x86-64.so.2 (0x00007f86b2c1c000) libnnz19.so => /oracle/app/oracle/product/19.3.0/db/lib/libnnz19.so (0x00007f86ac723000)
1 2 3 4 5 6 vi /etc/odbc.ini [ORACLE19C] Description = ORACLE ODBC DSN Driver = Oracle ServerName = pdb01 PORT = 1521
(4)测试连接(oracle用户)
1 isql -v ORACLE19C TEST TEST
3、配置ODBC连接达梦数据库 (1)配置odbc.ini和odbcinst.ini(root用户)
1 2 3 4 vi /etc/odbcinst.ini [DM ODBC DRIVER] Description = ODBC DRIVER FOR DM Driver = /home/oracle/dmbin/libdodbc.so
注意检查是否配置环境变量,配置环境变量如下:
1 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/home/oracle/dmbin
1 2 3 4 5 6 7 8 vi /etc/odbc.ini [DM8] Description = DM ODBC DSN Driver = DM ODBC DRIVER SERVER = 192.168.10.100 UID = SYSDBA PWD = SYSDBA TCP_PORT = 5236
(2)测试连接(dmdba用户)
1 isql -v DM8 SYSDBA SYSDBA
4、在Oracle和达梦数据库服务器上分别安装DMHS软件 (1)Oracle端创建目录/home/oracle/dmhs,安装到此目录,使用oracle用户安装
(2)达梦端创建目录/home/dmdba/dmhs,安装到此目录,使用dmdba用户安装
以上安装时均选择试用、完整版安装,其他一路回车即可,安装过程省略。
5、编辑agent.xml配置文件 (1)Oracle端配置agent.xml(oracle用户)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 vim /home/oracle/dmhs/bin/agent.xml <?xml version="1.0" encoding="utf-8"?> <agent> <port>2347</port> <lang>en</lang> <max_session>50</max_session> <lock_nowait>1</lock_nowait> <thr_num>5</thr_num> <group_num>5</group_num> <worker_thr>4</worker_thr> #优化参数:单表计算md5的线程数,有效值:[1, 64], 默认为4.只对没有大字段和LONG类型的表有效 <database> <char_code>PG_GB18030</char_code> <type>oracle19c</type> <server>192.168.10.101</server> <port>5236</port> <uid>SYSDBA</uid> <psw>SYSDBA</psw> </database> </agent>
(2)达梦端配置agent.xml(dmdba用户)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 vim /home/dmdba/dmhs/bin/agent.xml <?xml version="1.0" encoding="utf-8"?> <agent> <port>2347</port> <lang>en</lang> <max_session>50</max_session> <thr_num>5</thr_num> <group_num>5</group_num> <worker_thr>4</worker_thr> #优化参数:单表计算md5的线程数,有效值:[1, 64], 默认为4.只对没有大字段和LONG类型的表有效 <database> <char_code>PG_GB18030</char_code> <type>DM8</type> <server>192.168.10.100</server> <port>5236</port> <uid>SYSDBA</uid> <psw>SYSDBA</psw> </database> </agent>
6、启动agent进程 (1)启动Oracle端Agent(oracle用户)
1 nohup /home/oracle/dmhs/bin/dmhs_veri_agent_ora /home/oracle/dmhs/bin/agent.xml -noconsole >> /home/home/oracle/dmhs/bin/log/dmhs_veri_agent_dm.log 2>&1 &
(2)启动达梦端Agent(dmdba用户)
1 nohup /home/dmdba/dmhs/bin/dmhs_veri_agent_dm8 /home/dmdba/dmhs/bin/agent.xml -noconsole >> /home/dmdba/dmhs/bin/log/dmhs_veri_agent_dm.log 2>&1 &
7、Oracle端编辑veri.xml配置文件(oracle用户) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <?xml version="1.0" encoding="utf-8"?> <veri> <lang>en</lang> <max_thr>1</max_thr> #最大线程对数,范围为[1, 10000] <max_obj_thr>10</max_obj_thr> <report_left_num>100</report_left_num> <max_out_sync>1000</max_out_sync> <col_opt>0</col_opt> <report_dir>/home/oracle/report</report_dir> <temp_dir>/dmhs_temp_dir</temp_dir> <down_file>0</down_file> <mem_size>30</mem_size> #使用内存限制,默认10GB ;单位GB。 <report_buf_size>0</report_buf_size> #记录差异比对记录的最大缓存容量;当设置为0时,不缓存;默认生效,默认值256MB;以MB为单位。 <max_queue>200</max_queue> <char_code>PG_GB18030</char_code> <src> <agent_server>192.168.10.101</agent_server> <port>2347</port> <db_type>oracle19c</db_type> <odbc_str> <driver>dsn=ORACLE19C</driver> <db_server>192.168.10.101</db_server> <db_user>TEST</db_user> <db_pwd>TEST</db_pwd> <db_port>5236</db_port> </odbc_str> </src> <dest> <agent_server>192.168.10.100</agent_server> <port>2347</port> <db_type>DM8</db_type> <odbc_str> <driver>dsn=DM8</driver> <db_server>192.168.10.100</db_server> <db_user>SYSDBA</db_user> <db_pwd>SYSDBA</db_pwd> <db_port>5236</db_port> </odbc_str> </dest> </veri>
8、Oracle端编辑job.xml配置文件(oracle用户) 1 2 3 4 5 6 7 8 9 10 11 12 13 vim /home/oracle/dmhs/bin/job.xml <?xml version="1.0" encoding="GB2312" ?> <job> <name>job</name> <table_list> <table_info> <table_name>USERA.*==USERA.*</table_name> </table_info> <table_info> <table_name>USERB.*==USERB.*</table_name> </table_info> </table_list> </job>
9、开始对比(oracle用户) 1 cd home/oracle/dmhs/bin/
(1)指定jobfile进行对比,对比指定用户下的所有表
1 ./dmhs_veri conf=veri.xml jobfile=job.xml no_lob=1 mode=normal count=1
(2)指定jobfile进行对比,对比时指定单张表中满足条件的部分数据
–A.创建jobfile
1 2 3 4 5 6 7 8 9 10 vim /home/oracle/dmhs/bin/table1.xml <?xml version="1.0" encoding="GB2312" ?> <job> <name>tab1</name> <table_list> <table_info> <table_name>USERA.TABLE1==USERA.TABLE1</table_name> </table_info> </table_list> </job>
参数含义补充 COND:WHERE条件,同时加到源端数据库和目的端数据库 COND_SRC:WHERE条件,源端数据库 COND_DEST:WHERE条件,目的端数据库
(3)指定多张表,带where条件
–A.创建jobfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 vim /home/oracle/dmhs/bin/all_table.xml <?xml version="1.0" encoding="GB2312" ?> <job> <name>all_table</name> <table_list> <table_info> <table_name>USERA.TABLE1==USERA.TABLE1</table_name> <col_map_flag>3</col_map_flag> #参数说明:列映射配置标记,0不进行列映射,3表示普通列映射,例如“C1==D1” <tab_cmp_flag>0</tab_cmp_flag> #参数说明:0表示表结构和表数据都对比;1表示只需对比表结构。 <row_partition_src> #参数说明:行分区功能,依据条件选取表中部分行进行对比。仅仅在静态对比模式下有效,此处控制源AGENT查询条件。 <![CDATA[ "ID" < 1000]]> </row_partition_src> <row_partition_dest> #参数说明:行分区功能,依据条件选取表中部分行进行对比。仅仅在静态对比模式下有效,此处控制目的AGENT查询条件。 <![CDATA[ "ID" < 1000]]> </row_partition_dest> <key_list> #主键列,若没有可忽略 <col>ID==ID</col> </key_list> <col_list> <col>NAME==NAME</col> </col_list> #列对比 <col_list> <col>SEX==GENDER</col> </col_list> #列对比 </table_info> <table_info> <table_name>USERA.TABLE2==USERA.TABLE2</table_name> <col_map_flag>3</col_map_flag> <tab_cmp_flag>0</tab_cmp_flag> </table_info> </table_list> </job>
–B.执行数据对比
1 ./dmhs_veri conf=veri.xml jobfile=TABLE1.xml no_lob=1 mode=normal