注册
HS VERI对比工具使用
培训园地/ 文章详情 /

HS VERI对比工具使用

wzp 2023/05/25 1282 1 0

1.DMHS VERI对比工具配置
1.1环境介绍
源端:Oracle 192.168.0.13 1521
目的端:DM8 192.168.0.11 5236

1.2源端配置odbc
Vi /etc/odbcinst.ini
[Oracle ODBC DRIVER]
Description = ODBC DRIVER FOR Oracle
Driver = /u01/app/oracle/product/19c/db_1/lib/libsqora.so.19.1
Threadind = 0

[DM ODBC DRIVER]
Description = ODBC DRIVER FOR DM
Driver = /home/dmhs/db/bin/libdodbc.so
Threadind = 0

Vi /etc/odbc.ini
[wzp]
Driver = Oracle ODBC DRIVER
Description = ORACLE ODBC DSND
USERID = dmhs
PASSWORD = oracle
Servername = wzp
TCP_PORT = 1521
~
[dm8]
Driver = DM ODBC DRIVER
Description = DM ODBC DSND
SERVER=192.168.0.11
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
1.3源端配置agent.xml
Agent.xml在dmhs主目录bin下
Vi agent.xml
<

2347
en
<max_session>50</max_session>
<max_buf_size>1024</max_buf_size>
<thr_num>5</thr_num>
<group_num>5</group_num>
<worker_thr>5</worker_thr>
1

<char_code>PG_GB18030</char_code>
oracle19c
wzp
DMHS
oracle


1.4目的端配置agent.xml
Agent.xml在dmhs主目录bin下
Vi agent.xml
<

2348
en
<max_session>50</max_session>
<max_buf_size>1024</max_buf_size>
<thr_num>5</thr_num>
<group_num>5</group_num>
<worker_thr>5</worker_thr>

<char_code>PG_GB18030</char_code>
DM8
192.168.0.11
5236
SYSDBA
SYSDBA


1.5两端启动agent
Oracle端:./dmhs_veri_agent_ora
达梦端:./dmhs_veri_agent_dm8
1.6配置veri.xml
在任意一台服务器配置对比服务文件veri.xml,本次在源端配置,veri.xml文件在dmhs主目录bin下
Vi veri.xml (注意加粗部分)

en 5 5 1000 0 102 51 400 20 PG_GB18030 192.168.0.13 2347
  <db_type>ORACLE19c</db_type>
  <odbc_str>
     <driver>Oracle ODBC DRIVER</driver>
     <db_server>wzp</db_server>
     <db_user>dmhs</db_user>
     <db_pwd>oracle</db_pwd>
  </odbc_str>
192.168.0.11 2348 DM8 DM ODBC DRIVER 192.168.0.11 SYSDBA SYSDBA 5236
1.7快速生成job.xml 在Oracle端或者在达梦端执行以下存储过程,或自动生成job.xml文件内容,注意下面加粗用户根据自己实际情况改 ----------------------ORACLE set serveroutput on; declare cursor emp_cur is select sch.name, tab.name, tab.obj# from sys.obj$ tab, sys.user$ sch where sch.user#=tab.owner# and sch.name in ('SC') and tab.type#=2; sql_select varchar(400); schname varchar(30); tabname varchar(30); objid int; columnname varchar(30); type cur_select is ref cursor; curs cur_select; colnum int; begin dbms_output.put_line(''); dbms_output.put_line(''); dbms_output.put_line(' j1'); dbms_output.put_line(' '); open emp_cur; loop FETCH emp_cur into schname, tabname, objid; exit when emp_cur%NOTFOUND; dbms_output.put_line(' '); dbms_output.put_line(' '||schname||'.'||tabname||'=='||schname||'.'||tabname||''); SQL_SELECT := 'SELECT name FROM SYs.col$ where obj#='||objid||' and (type#<112 or type#>115)';
   colnum:=0;
 dbms_output.put_line('              <col_list>');
   open curs for SQL_SELECT;
     loop
        fetch curs into columnname; 
        colnum := colnum +  1;
      exit when curs%notfound; 
        dbms_output.put_line('                  <col>'||columnname||'=='||columnname||'</col>');
      end loop;
      close curs;
      if colnum = 0 then
       dbms_output.put_line('no columns found');
       end if;
      dbms_output.put_line('              </col_list>');
      dbms_output.put_line('      </table_info>');
   end loop;
   close emp_cur;
   dbms_output.put_line('  </table_list>');
   dbms_output.put_line('</job>');
   end;

-------------------DM
set serveroutput on;

declare
cursor emp_cur is select sch.name, tab.name, tab.ID from sys.sysobjects tab, sys.sysobjects sch where sch.name in ('SC') and sch.type$='SCH' and sch.id=tab.schid and tab.SUBTYPE$='UTAB';
sql_select varchar(400);
schname varchar(300);
tabname varchar(300);
objid int;
columnname varchar(300);
cur_select cursor ;
colnum int;
begin
print('');
print('');
print(' j1');
print(' <table_list>');
open emp_cur;
loop
FETCH emp_cur into schname, tabname, objid;
exit when emp_cur%NOTFOUND;
print(' <table_info>');
print(' <table_name>'||schname||'.'||tabname||'=='||schname||'.'||tabname||'</table_name>');
SQL_SELECT := 'SELECT name FROM SYS.SYSCOLUMNS where ID='||objid||' and TYPE$ NOT IN(''CLOB'',''BLOB'',''TEXT'')';

   colnum:=0;
 dbms_output.put_line('              <col_list>');
    open cur_select for SQL_SELECT;
    loop
        fetch cur_select into columnname; 
        colnum := colnum +  1;
      exit when cur_select%notfound; 
        print('                  <col>'||columnname||'=='||columnname||'</col>');
      end loop;
      close cur_select;
      if colnum = 0 then
       print('no columns found');
       end if;
      print('              </col_list>');
      print('      </table_info>');
   end loop;
   close emp_cur;
   print('  </table_list>');
   print('</job>');
   end;

1.8比对
./dmhs_veri "TABLE=(SC.==SC.)" mode=normal

用job比对
./dmhs_veri jobfile=job.xml

全模式静态对比
./dmhs_veri jobfile=job.xml mode=normal

全模式FAST对比:
./dmhs_veri “table=(SC.==SC.)” mode=fast

单表对比
./dmhs_veri “table=(SC.test==SC.test)” mode=normal

1.9veri比对工具代价估算
Linux文件句柄数:
文件句柄个数≈(表行数/一百万)*2

磁盘空间
占用磁盘空间大小:
占用的磁盘空间大小≈(表行数/一百万)322M
注意:在dmhs_veri所在服务器,最好保证足够的磁盘空间,Linux系统注意使用ulimit -n xxx

内存估算公式
占用内存大小≈MAX_THR64 sort_thr_n + 0.5*N_TABS (MB)
其中,MAX_THR 为 veri.xml 中配置参数,N_TABS 为对比的表个数。如果总内存不足, 就需要减小 MAX_THR 值。
1.10快速比对两边表结构
create table test as select owner,table_name,column_name,'DM' SRC from dba_tab_columns where owner in ('SC','CD','DP');

insert into test select owner,table_name,column_name,'ORACLE' SRC from dba_tab_columns@PMSDB where owner in ('SC','CD','DP');
COMMIT;

SELECT OWNER,SRC,COUNT(*) FROM TEST GROUP BY OWNER,SRC;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服