一、DMHS介绍
达梦数据实时同步软件,简称 DMHS,是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实时同步复制。
DMHS 基于成熟的关系数据模型和标准接口,支持多种软硬件平台,能够灵活的配置出一对一、一对多、多对一、多对多以及级联等多种形式的复制拓扑结构,可以广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域。目前支持多种异构数据平台,可以根据用户需求采用非常灵活的方式配置出各种拓扑结构。 目前,源数据库可支持 DM 各系列、Oracle9i、Oracle10g、Oracle11g、Oracle12c、ORACLE RAC 集群、DB2、PostgreSQL、MySQL 等。目的数据库支持具有 ODBC 标准接口实现的各种主流关系数据库管理系统,目前适配过的数据库有 DM 各系列、DM 集群、Oracle9i、Oracle10g、Oracle11g、Oracle12c、ORACLE RAC 集群、DB2、Sybase、SQLServer、PostgreSQL、MySQL 等。
二、实验环境
首先准备Vmware 虚拟机RedHat6 2台,分别安装DM7数据库以及DMHS实时同步软件(DMHS 支持多种计算机操作系统平台,支持 Windows 系列、Linux 系列、IBM AIX、HP-UNIX 系列、Solaris 系列、国产操作系统 Kylin、Rocky 等 32 位和 64 位操作系统,具体可以根据自己环境需要做选择)。
源端:192.168.134.138
目的端:192.168.134.141
DM7数据库账号密码端口均为默认,SYSDBA/SYSDBA@LOCALHOST:5236
DM7安装目录/dm/,属主属组为 dmdba:dinstall
DMHS元数据库默认用户密码及端口,SYSDBA/SYSDBA@LOCALHOST:15236
DMHS安装目录/opt/dmhs,属主属组为 dmdba:dinstall
三、实验步骤
1、安装DM7数据库
该步骤算是入门DM数据库的基础,在此不作赘述,若不了解安装步骤,可以参考官方安装文档,按照步骤安装完毕即可
根据上面安装完数据库,需要注意:
* 必须开启归档日志功能----DMHS实时同步,主要是基于归档日志实现:
设置归档有多种方式,修改配置文件dm.ini参数,再编写arch.ini配置文件;另一种则是执行sql开启归档,这里介绍SQL开启归档方式,具体执行SQL如下:
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/arch,TYPE=LOCAL,FILE_SIZE=256,SPACE_LIMIT=204800';
ALTER DATABASE OPEN;
SQL参数解析:
DEST:归档日志具体存储路径;
TYPE:归档日志类型,有联机归档和本地归档,默认本地归档,即归档日志存储在本机;
FILE_SIZE:归档日志文件大小,单位M;
SPACE_LIMIT:归档日志空间限制,参数为0即为不限制空间,单位M;
归档日志相关参数配置:
sp_set_para_value(2,'RLOG_APPEND_LOGIC',1);
sp_set_para_value(2,'RLOG_APPEND_SYSTAB_LOGIC',0);
参数解析:
RLOG_APPEND_LOGIC:1代表如果有主键列,记录UPDATE和DELETE操作时只包含主键列信息,若没有主键列则包含所有列信息;2代表不论是否有主键列,记录UPDATE和DELETE操作时都包含所有列的信息;
RLOG_APPEND_SYSTAB_LOGIC:是否启用在日志中记录系统表逻辑操作功能。该参数默认取值为0,即不启用;设置为1时,启用该功能,该参数需要RLOG_APPEND_LOGIC启用后生效;
重启数据库查看确认是否生效:
select para_value from v$dm_ini where para_name in ('RLOG_APPEND_LOGIC','RLOG_APPEND_SYSTAB_LOGIC');
2、安装DMHS
安装DMHS和安装DM数据库方式基本类似,可以图形化安装,注意源端目的端节点均需要安装DMHS软件(安装DMHS的机器,至少需要能够访问源端目的端数据库,实际上DMHS软件也可以安装在不同机器)
3、配置代理,访问管理平台
修改配置文件,设置代理/opt/dmhs/hs_agent/dmhs_agent.xml,目前我的个人实验,想在192.168.134.138机器上通过管理平台管控配置同步任务,设置如下:
status_server:改成需要用浏览器加载源端目的端hs_agent服务节点的地址
安装完毕DMHS软件后,到代理机器访问管理平台,默认账号密码admin/888888
4、配置目的端exec执行器,启动exec模块
先启动hs_agent服务,后启动exec模块,页面上 右键--启动,即可启动相关服务以及模块
exec功能模块另一种启动方式,是到DMHS安装目录下tool子目录,先页面启动hs_agent服务,然后执行命令:
./dmhs_console
conn $ip:$port(ip即为安装dmhs软件,并创建exec执行器或cpt捕获器的主机ip地址,端口默认是5345,创建exec捕获器执行器那些的时候可以指定端口)
start exec
5、配置源端cpt捕获器
方式同上,具体配置cpt截图如下:
6、源端初始化装载数据,然后再启动相关模块
cd /opt/dmhs/tool/
./dmhs_console
COPY 0 "SCH.NAME='SYSDBA'" CREATE|INSERT
start cpt
或者在管理平台页面右键启动模块亦可。
7、源端插入数据测试
从上面截图可以看到:源端192.168.134.138插入一条数据后,目的端192.168.134.141立即可以查询到该数据,即实现了数据实时同步。
四、实验中遇到的问题
目的端启动exec模块以及源端启动cpt模块报错
模块报错,从页面上没有看到详细报错说明,要解决该问题,我们需要查询对应模块记录日志:
研究了一下dmhs的安装目录,发现我们每个创建的模块,都有对应的日志目录
具体路径为:$安装目录/INST_HS/$HS实例名/log/dmhs*.log(HS实例名即创建执行器、捕获器时的命名)
该示例详细路径为 /opt/dmhs/INST_HS/tar_exec/log/dmhs_202111.log cat查询该日志内容,发现有乱码
直接上传到本机上面打开日志发现具体报错提示so动态链接库文件缺失:
find / -name 'libdmhs_exec.so',发现这个文件存在
ldd libdmhs_exec.so
查询该动态链接库的依赖,发现缺失依赖文件
libdodbc.so => not found
libdmoci.so => not found
[root@localhost tar_exec]# ldd libdmhs_exec.so
linux-vdso.so.1 => (0x00007fffd9bff000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb2ec92e000)
libm.so.6 => /lib64/libm.so.6 (0x00007fb2ec6a9000)
librt.so.1 => /lib64/librt.so.1 (0x00007fb2ec4a1000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb2ec285000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb2ec080000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00007fb2ebd51000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007fb2eb7f6000)
libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00007fb2eb5e0000)
libdmhs_cvt.so => ./libdmhs_cvt.so (0x00007fb2eb355000)
/lib64/ld-linux-x86-64.so.2 (0x0000003e8f400000)
libdodbc.so => not found
libdmhs_exp.so => ./libdmhs_exp.so (0x00007fb2eaf7f000)
libdmhs_xml.so => ./libdmhs_xml.so (0x00007fb2ead70000)
libdmoci.so => not found
然后在本机上find / -name 'libdmoci.so' 发现的确没有该文件,说明该问题根源,就是动态链接库文件缺失导致。
关于 libdodbc.so 和 libdmoci.so 文件,都是达梦的odbc文件,相关文件已上传到下面链接地址,解压后,把所有文件直接拷贝到DM7数据库安装目录的bin目录下,再重新执行加载模块命令,问题解决。