使用dmhs veri手动比对ORACLE同步到DM数据

使用dmhs veri手动比对ORACLE同步到DM数据

veri介绍

在进行数据库数据的实时同步的时候,需要了解同步的结果是否正确,因此需要有数据对比工具进行数据的对比,并生成详细的对比报告,提供用户参考。对比工具仅仅生成报告,对数据不一致的情况不做任何操作,仅仅提示用户发生了数据不一致情况,并且告诉用户那些数据不一致。目前对比工具支持对比的数据库有:Oracle、DM6、DM7、DM8、KingBase、MySQL、DB2、PostgreSQL

VERI 产品构成:系统主要分为对比代理服务和对比校验进程。

对比代理服务分源对比代理服务和目的对比代理服务。对比代理服务的作用是从数据服

务器取得数据记录,并取得数据记录的 MD5 值发送到对比校验进程进行校验。对比校验进程对数据进行比对后,直接访问源数据库服务器和目的数据库服务器,生成详细的对比报告。

系统结构如下图所示。

使用dmhs veri手动比对ORACLE同步到DM数据_第1张图片

术语解释如下:

1) AGENT

对比工具代理服务,主要用作数据获取,并计算行数据的 MD5,发送给对比模块。

2) VERI

对比校验进程,主要进行模式下对象对比,数据对比,并且生成对比报告。

3) DMHS

达梦数据实时同步工具

本产品包含以下功能:

1) 动态对比

对比工具与 DMHS 协同工作,保证源表与目的表都是执行完相同事务后对查询结果集进行对比。

2) 静态对比

对比工具单独对比,没有 DMHS 的协同。

3) 键值对比

按照主键或者唯一索引值排序进行对比。

4) 非键值对比

按照行数据 MD5 值排序后进行对比。

5) 二次确认对比

在对比过程中,由于 DMHS 同步的时间差,第一次对比会存在不一致,因此需要针对第一次对比的结果,再次进行第二次确认对比,确定 DMHS 同步是否存在延迟或失败。

6) 快速对比 

仅仅对表进行记录行数的对比。

7) 锁表动态对比

动态对比的一种,通过锁表控制源表与 DMHS 同步数据一致。

8) 闪回查询动态对比

动态对比的一种,通过闪回查询直接取得某 SCN 的结果集,仅仅适用 Oracle 库中不包含 LONG, LONG RAW 类型的表。

一、安装veri前环境准备

数据比对环境

数据库类型

IP

操作系统

DB_PORT

dmhs_veri

源端

ORACLE

192.168.1.32

CentOS 6.5

1521

Agent、veri

目的端

达梦8

192.168.1.105

CentOS 7.5

5236

Agent

1.1 Linux 代理连接为Oracle

1.1.1 安装unixODBC

需要声明的是,只有在校验进程dmhs_veri运行的机器才需要安装并配置unixODBC,且unixODBC版本需要使用2.3.0及以上的版本。

获取unixODBC-2.3.0.tar.gz,

执行tar -xzvf unixODBC-2.3.0.tar.gz

然后cd unixODBC-2.3.0/

路径下执行./configure

然后执行make && make install

配置unixODBC的odbc.ini 和odbcinst.ini文件。

1.1.2 环境变量的检查和配置

在oracle根目录下.bash_profile中添加如下两行:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:$ORACLE_HOME/lib

使环境变量生效:

source .bash_profile

1.1.3 监听配置和检查

执行lsnrctl status,确保 listener.ora 文件中HOST参数与当前机器hostname一致,如下图所示。

使用dmhs veri手动比对ORACLE同步到DM数据_第2张图片

 1.1.4 配置unixODBC源

以root用户进入到/usr/local/etc文件夹下,编辑如下文件odbcinst.ini,其中Driver为oracle的libsqora.so.XX.X文件的路径。

chown oracle.oinstall /usr/local/etc/*

[Oracle in OraDb11g_home1]

Description = ODBC DRIVER FOR ORACLE

Driver = /mnt/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1

threading = 0

在odbc.ini 配置示例中[XXX]是DSN名称。

示例:

[RACDB_ST]

Description = ORACLE ODBC DSN

Driver = /mnt/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1

SERVER=192.168.1.32

UID = DMHS

PWD = DMHS

SERVERNAME=RACDB_ST

PORT = 1521

注意:SERVERNAME=RACDB_ST配置的是tnsnames.ora 中的tns连接名。

配置完成之后,验证配置是否正确:

su - oracle

 cd /usr/local/bin  

./isql 服务名 用户名 密码

./isql RACDB_ST DMHS DMHS

使用dmhs veri手动比对ORACLE同步到DM数据_第3张图片

 如果isql连接成功,则配置成功,如果连接不成功,可以检查如下几处的配置:listener.ora/tnsnames.ora,.bash_profile,/etc/hosts。其中源库机器的hosts文件中应添加源机和目的机器的ip以及其对应主机名。

1.2 Linux 代理连接为DM

1.2.1 环境检查和配置

检查代理服务器运行机器的环境变量LD_LIBRARY_PATH,保证包含dm安装路径下的bin文件夹。比如,dm安装在/dm/dmdbms/dm8下,确保执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm/dmhs_veri/bin:/dm/dmhs_veri/db/bin:/dm/dmdbms/dm8/bin。

[dmdba@centos-05 ~]$ isql dm8 -v

[01000][unixODBC][Driver Manager]Can't open lib '/dm/dmdbms/dm8/bin/libdodbc.so' : file not found

[ISQL]ERROR: Could not SQLConnect

注意:准备好与数据库版本号匹配的libdmoci.so 并放入$DM_HOME/bin

1.2.2 配置unixODBC源

chown dmdba.dinstall /usr/local/etc/*

Su - dmdba

在/usr/local/etc的odbcinst.ini文件中添加(其中unixODBC安装在/usr/local文件夹下):

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

Driver = /dm/dmdbms/dm8/bin/libdodbc.so

threading = 0

在odbc.ini文件里添加:

[DM8]

Description = DM ODBC DSN

Driver = DM8 ODBC DRIVER

SERVER = 192.168.1.105

UID = SYSDBA

PWD = dameng123

TCP_PORT = 5236

ODBC验证:

使用dmhs veri手动比对ORACLE同步到DM数据_第4张图片二、搭建步骤

2.1 安装DMHS(veri)

[oracle@node32 soft]$ ./dmhs_V4.3.08_oracle_rev126685_rh6_64_veri_20230323_sp5.bin -i

Extract install files..........

1.English(English)

2.Simplified Chinese(简体中文)

Select the language to install[2.Simplified Chinese(简体中文)]:

/tmp/DMHSInstall/install.log

1.免费试用达梦数据实时同步

2.使用已申请的Key文件

验证许可证文件[1.免费试用达梦数据实时同步]:

1.精简版

2.完整版(web客户端)

3.自定义

安装类型[1.精简版]:2

1.实时同步软件服务器

2.远程部署工具

3.实时同步软件客户端

4.内置数据库

5.实时同步软件配置助手

6.手册

所需磁盘空间:869 MB

安装目录: [/home/oracle/dmhs]/dm/dmhs_veri

该路径不为空,是否继续安装?[Y or N]Y

安装路径可能存在覆盖安装

1.统一部署

2.现在初始化

是否初始化达梦数据实时同步系统[1.统一部署]:

正在安装

default start ...    default finished.

server start ...    server finished.

hs_agent start ...    hs_agent finished.

webmanager start ...    webmanager finished.

db start ...    db finished.

hsca start ...    hsca finished.

doc start ...    doc finished.

doc start ...    doc finished.

postinstall start ...    postinstall finished.

正在创建快捷方式

安装成功

ora

rac

远程部署工具配置

远程部署工具名称[HsAgent]:

主机Ip(外网)[192.168.0.201](192.168.0.201,192.168.1.32):192.168.1.32

远程部署工具管理端口[5456](1000-65535):

内置数据库轮询间隔[3](1-60):

内置数据库IP[192.168.0.201]:192.168.1.32

内置数据库端口[15236]:

内置数据库用户名[SYSDBA]:

内置数据库密码[SYSDBA]:dameng123

服务脚本环境变量设置

依赖库路径

提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。

请配置依赖库路径:

内置数据库服务

1.自动

2.手动

启动方式:[2.手动]

正在创建内置数据库服务

初始化内置数据库

远程控制服务

1.自动

2.手动

启动方式:[2.手动]

正在创建远程控制服务

web服务

1.自动

2.手动

启动方式:[2.手动]

正在创建web服务

达梦数据实时同步V4.0安装完成

更多安装信息,请查看安装日志文件:

/dm/dmhs_veri/log/install.log

查看安装的veri:

[oracle@node32 bin]$ ls -rlt *veri*

-rwxr-xr-x. 1 oracle oinstall 118626 Jun 13 10:01 veri_xml_crt

-rwxr-xr-x. 1 oracle oinstall 831547 Jun 13 10:01 dmhs_veri

-rwxr-xr-x. 1 oracle oinstall 678871 Jun 13 10:01 dmhs_veri_repair

-rwxr-xr-x. 1 oracle oinstall 380116 Jun 13 10:01 dmhs_veri_local_ora

-rwxr-xr-x. 1 oracle oinstall 357438 Jun 13 10:01 dmhs_veri_agent_ora

注意:dmhs软件安装需要安装源端和目的端,确认好同步系统环境版本;准备好与DM数据库版本号匹配的libdmoci.so 并放入$DM_HOME/bin

2.2 ORACLE到DM的数据比对

2.2.1 源端ORACLE配置

2.2.1.1 环境变量配置

必须将libdodbc.so 所在目录或DM bin 目录添加到LD_LIBRARY_PATH中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm/dmhs_veri/bin

2.2.1.2 ODBC 配置

源端oracle服务器需要引入dm  libdodbc.so 动态库以及相关依赖或直接安装达梦数据库软件。

odbc.ini

vi /usr/local/etc/odbc.ini

[RACDB_ST]

Description = ORACLE ODBC DSN

Driver = /mnt/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1

SERVER=192.168.1.32

UID = DMHS

PWD = DMHS

SERVERNAME=RACDB_ST

PORT = 1521

[DM8]

Description = DM ODBC DSN

Driver = /dm/dmhs_veri/db/bin/libdodbc.so

SERVER = 192.168.1.105

UID = SYSDBA

PWD = dameng123

TCP_PORT = 5236

注意此处DM 端口配置为TCP_PORT!!!

odbcinst.ini

vi /usr/local/etc/odbcinst.ini

[Oracle in OraDb11g_home1]

Description = ODBC DRIVER FOR ORACLE

Driver = /mnt/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1

threading = 0

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

Driver = /dm/dmhs_veri/db/bin/libdodbc.so

threading = 0

检查unixODBC配置是否正确

使用oracle用户连接检查unixODBC配置是否正确

isql RACDB_ST DMHS DMHS

isql dm8 -v

该处确保isql 能够成功连通oracle 和 dm 否则后续启动也会报数据库连接错误。

2.2.1.3 Agent组件配置

在AGENT服务启动前必须完成相关配置,agent.xml文件放至/dm/dmhs_veri/bin目录下

 

6347

en

50  

5  

 

ORACLE11g  

192.168.1.32:1521/RACDB_ST

DMHS  

DMHS  

2.2.1.4 VERI组件配置

在VERI执行前必须完成相关配置,veri.xml文件放至/dm/dmhs_veri/bin目录下

en

40

10

20000

100000

1

192.168.1.32

6347

ORACLE11g

dsn=RACDB_ST

192.168.1.32:1521/RACDB_ST

DMHS

DMHS

192.168.1.105

5350

DM8

dsn=DM8

192.168.1.105

sysdba

dameng123

5236

PG_GB18030

2.2.2目的端DM配置

2.2.2.1 Agent组件配置

在AGENT服务启动前必须完成相关配置,agent.xml文件放至dmhs bin目录下

 

5350

en

50  

DM8

192.168.1.105

5236

sysdba  

dameng123  

VERI作业配置

在执行dmhs_veri时除了必带参数conf=veri.xml用于获取VERI组件配置文件位置外,还必须携带table=(源端表==目的端表)或者指定作业文件jobfile=job_scott.xml来确定源端到目的端的比对对象。job_scott.xml放至源端dmhs bin目录下

dmhs_veri conf=veri.xml jobfile=job_scott.xml

job_scott.xml

job

SCOTT.EMP==SCOTT.EMP

SCOTT.TEST==SCOTT.TEST

    

四、对比执行命令

步骤一:启动源端AGENT

./dmhs_veri_agent_ora agent.xml

或配置服务启动:

cd /dm/dmhs_oracle/bin/service_template

[oracle@node32 service_template]$ cp AgentOraService ../

[oracle@node32 bin]$ grep "/dm/dmhs_oracle" AgentOraService

DMHS_HOME=/dm/dmhs_oracle

PROG_DIR=/dm/dmhs_oracle/bin

CONF_PATH=/dm/dmhs_oracle/bin/agent.xml

[oracle@node32 bin]$ AgentOraService start

_REPLACE_SELF_NLS_LANG(ORACLE NLS_LANG) is not set in this script, starting failed!!!

[oracle@node32 bin]$ grep "HS_NLS_LANG" AgentOraService

HS_NLS_LANG="american_america.AL32UTF8"

[oracle@node32 bin]$  AgentOraService start

Starting AgentOraService: [ OK ]

步骤二:启动目的端AGENT

./dmhs_veri_agent_dm8 agent.xml

或配置服务启动:

[dmdba@centos-05 service_template]$ cd /dm/dmhs_ora_dm/bin/service_template

[dmdba@centos-05 service_template]$ cp AgentDm8Service ../

[dmdba@centos-05 bin]$ grep "/dm/dmhs_ora_dm" AgentDm8Service

DMHS_HOME=/dm/dmhs_ora_dm

PROG_DIR=/dm/dmhs_ora_dm/bin

CONF_PATH=/dm/dmhs_ora_dm/bin/agent.xml

[dmdba@centos-05 bin]$ grep "HS_NLS_LANG" AgentDm8Service

HS_NLS_LANG="american_america.ZHS16GBK"

[dmdba@centos-05 bin]$ AgentDm8Service start

Starting AgentDm8Service: [ OK ]

步骤三:在源端服务器运行对比执行命令

./dmhs_veri conf=veri.xml jobfile=job_scott.xml use_key=0

use_key为0时执行非主键比对,当use_key为1时执行主键比对。不使用此参数时,默认使用非主键比对;当use_key为1时,对比的表无主键则自动选择非主键比对。

比对结果:

[oracle@node32 bin]$ ./dmhs_veri conf=veri.xml jobfile=job_scott.xml use_key=0

VERI[INFO]: VERI start up, current version: V1.3.08-Build(2023.03.23-126685trunc)_64_2303_sp5

PUB[WARN]: NLS_LANG user env:american_america.AL32UTF8 conflicts with char_code:PG_GB18030, set NLS_LANG to AMERICAN_AMERICA.ZHS32GB18030

VERI[INFO]: CONNECT: DSN=RACDB_ST;UID=DMHS;PWD=******

PUB[WARN]: user env lang:PG_UTF8 is conflict with char_code:PG_GB18030

PUB[WARN]: use char_code:PG_GB18030

VERI[INFO]: CONNECT: DSN=DM8;UID=SYSDBA;PWD=******

VERI[INFO]: file dmhs.key not found, use default license!

MGR[WARN]: License will expire in 10 day(s) on 2023-06-23

VERI[INFO]: veri odbc connect str: DSN=RACDB_ST;UID=DMHS;

VERI[INFO]: veri odbc connect str: DSN=DM8;UID=SYSDBA;

VERI[INFO]: jobfile: job_scott.xml, configuration total number of need compared table: 2

VERI[INFO]: jobfile: job_scott.xml, real total number of need compared table: 2, org_conf: 2

VERI[INFO]: the job begin

VERI[INFO]: the execute mode is NORMAL

VERI[INFO]: source agent ip 192.168.1.32:6347

VERI[INFO]: destination agent is 192.168.1.105:5350

VERI[INFO]: the veri of pair tables is starting (1/2 : SCOTT.EMP==SCOTT.EMP)...

VERI[INFO]: veri odbc connect str: DSN=RACDB_ST;UID=DMHS;

VERI[INFO]: Report job thread start ...

VERI[INFO]: the veri of pair tables is starting (2/2 : SCOTT.TEST==SCOTT.TEST)...

VERI[INFO]: veri odbc connect str: DSN=RACDB_ST;UID=DMHS;

VERI[INFO]: veri odbc connect str: DSN=DM8;UID=SYSDBA;

VERI[INFO]: veri odbc connect str: DSN=DM8;UID=SYSDBA;

VERI[INFO]: veri get dst agent bulk data (SCOTT.EMP, 2, 14)

VERI[INFO]: table sort: (SCOTT.EMP)

VERI[INFO]: veri get dst agent bulk data (SCOTT.TEST, 4, 2)

VERI[INFO]: table sort: (SCOTT.TEST)

VERI[INFO]: veri get dst agent bulk data (SCOTT.EMP, 2, 14)

VERI[INFO]: veri get dst agent bulk data (SCOTT.TEST, 4, 2)

VERI[INFO]: veri get src agent bulk data (SCOTT.EMP, 1, 14)

VERI[INFO]: veri get src agent bulk data (SCOTT.TEST, 3, 3)

VERI[INFO]: veri get src agent bulk data (SCOTT.EMP, 1, 14)

VERI[INFO]: veri get src agent bulk data (SCOTT.TEST, 3, 3)

VERI[INFO]: no-key compare start: (SCOTT.EMP==SCOTT.EMP)

VERI[INFO]: (SCOTT.EMP==SCOTT.EMP) compare over, out_sync: 0, in_sync: 14, used time : 212.152(ms)

VERI[INFO]: no-key compare start: (SCOTT.TEST==SCOTT.TEST)

VERI[INFO]: (SCOTT.TEST==SCOTT.TEST) compare over, out_sync: 1, in_sync: 2, used time : 00:00:01.174

VERI[INFO]: Detail report : SCOTT.TEST=SCOTT.TEST (Total print: 1)

VERI[INFO]: Report job thread exit.

VERI[INFO]: Report folder path          : /dm/dmhs_veri/bin/report/job_20230621_001

VERI[INFO]: Summary report file path    : /dm/dmhs_veri/bin/report/job_20230621_001/veri_report_job.txt

VERI[INFO]: Detail report folder path   : /dm/dmhs_veri/bin/report/job_20230621_001/detail_job

VERI[INFO]: Exit the Verify tool

[oracle@node32 bin]$ cat /dm/dmhs_veri/bin/report/job_20230621_001/veri_report_job.txt

******************************************************

      DM Verify Data Tool

version  : V1.3.08-Build(2023.03.23-126685trunc)_64_2303_sp5

start    : 2023-06-21 23:56:28

end      : 2023-06-21 23:56:43                  

******************************************************

source tables or views more than dest as follow:

dest tables or views more than source as follow:

******************************************************

No rowid file table pair as follow:

******************************************************

Job Name                        : job

execute mode                    : NORMAL

source agent ip                 : 192.168.1.32:6347

source agent database type      : ORACLE11g

destination agent ip            : 192.168.1.105:5350

destination agent database type : DM8

******************************************************

Notice:When nonkey compare, update show as insert and delete, so the sum of same and diff may be over total

Total compared 2 tables, list as follow:

[OK] SCOTT.EMP == SCOTT.EMP

in sync         : 14

out sync        : 0

[NO] SCOTT.TEST == SCOTT.TEST

in sync         : 2

out sync        : 1  --有一条记录不一致

detail file     : /dm/dmhs_veri/bin/report/job_20230621_001/detail_job/SCOTT.TEST=SCOTT.TEST.txt

******************************************************

[oracle@node32 bin]$ cat /dm/dmhs_veri/bin/report/job_20230621_001/detail_job/SCOTT.TEST=SCOTT.TEST.txt

Configuration veri agent information(ORACLE11g 192.168.1.32:6347== DM8 192.168.1.105:5350)

Total information(SCOTT.TEST==SCOTT.TEST):

KEY_MODE:ROWID

AGENT FROM SELECT SQL: SELECT rowid ,"ID","NAME" FROM "SCOTT"."TEST"  

AGENT TO SELECT SQL: SELECT rowid ,"ID","NAME" FROM "SCOTT"."TEST"  

there are 2 in sync, 1 out sync

******************************************************

INSERT(exist in source database but not in dest: ORACLE11g) :

下面记录在源端oracle库中有,但是在目的端达梦库中没有

ROWID(20):'AAAVaJAAEAAAACrAAB',RAWDATA:'3','test03',

达梦在线服务平台:https://eco.dameng.com

你可能感兴趣的:(达梦,数据库,达梦,dmhs,veri,数据比对)