dmhs之dm8 to dm8

目录

DMHS介绍

DMHS搭建

 DMHS安装配置

常见错误


DMHS介绍

支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统

支持一对一、一对多广播型、多对一聚合型、多对多以及级联复制等多种数据复制形式

总体架构:单进程多线程架构(dmhs_server)

源端主要线程:日志读、日志分析、日志发送、监听、调度管理

目标端主要线程:日志接收、日志执行、监听、调度管理

扩展功能模块:guard进程守护、stat监控统计、对比工具、web管理平台

工作模式

捕获器 捕获器在数据实时同步系统中负责读取、解析源端数据库管理系统的归档日志,并发送解析后的数据。 
执行器 执行器在数据实时同步系统中负责接收数据,并进行数据映射及事务的入库(目标端数据库)执行。 
路由器 路由器适用于捕获器和执行器被网关隔断的环境,捕获器和执行器无法通过NET实现网络直连,需要经过第三台机器中转的情况。
转发器 捕获器和执行器之间存在物理隔离网闸,无法通过网络直连需要通过文件中转的情况捕获器(cpt)转发器 (transfer) 路由器 (route) 执行器 (exec)

DMHS搭建

作为源端的dmhs必须部署在源端数据库所在的机器上(读取归档的需求);

作为目的端的dmhs可以不与目的端数据库部署在同一机器上,但是前提要求是dmhs所在机 器上必须有能够连接目的端数据库的对应的odbc工具。

环境准备:

两节点间需要通信,测试时直接关闭了防火墙

两台虚拟机,Centos7 ,DM8

源端:192.168.89.128 port_num=5236 db_name=hs_src

目标端:192.168.89.129 port_num=5236 db_name=hs_dest

开启归档和逻辑日志

DMHS同步源端数据库需要开启归档模式&附加日志参数

ARCH_INI=1
DM6附加日志参数:ENABLE_LOGICAL_DML_LOG =1
DM7/DM8:
RLOG_APPEND_LOGIC=1
注意:FAST_COMMIT需要为0 批量提交事务的个数
oracle作为源端开启附加日志:
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
此次测试源端目标端均打开了归档和逻辑日志参数

归档配置:

源库:
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/dmdata/hs_src/arch
ARCH_FILE_SIZE=128
ARCH_SPACE_LIMIT=1024
目标库:
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST=/dmdata/hs_dest/arch
ARCH_FILE_SIZE=128
ARCH_SPACE_LIMIT=1024

启动数据库并检查配置:

测试连接
$ disql SYSDBA/SYSDBA
检查归档:SQL> select arch_name,arch_type,arch_dest,arch_is_valid from v$dm_arch_ini;
检查逻辑日志:SQL> select para_name,para_value,sess_value,file_value from v$dm_ini where para_name ='RLOG_APPEND_LOGIC';
检查FAST_COMMIT:SQL> select para_name,para_value,sess_value,file_value from v$dm_ini where para_name ='FAST_COMMIT';
检查在线日志:SQL> select * from sys.v$rlogfile;

 DMHS安装配置

Linux环境:
命令行方式: ./dmhs_V3.1.3_dm7_rev90481_rh7_64_veri_20200507.bin -i 
图形化方式: ./dmhs_V3.1.3_dm7_rev90481_rh7_64_veri_20200507.bin
作为源端的dmhs必须部署在源端数据库所在的机器上(读取归档的需求),作为目的端的dmhs可以不与目的端数据库部署在同一机器上,但是前提要求是dmhs所在机器上必须有能够连接目的端数据库的对应的odbc工具。
Windows环境:双击exe安装程序文件,根据安装向导提示完成安装过程
上传安装包:
设置权限
# chown -R dmdba:dinstall dmhs_V4.1.2_dm8_rev99922_rh6_64_veri_20210604.bin
# chmod +x dmhs_V4.1.2_dm8_rev99922_rh6_64_veri_20210604.bin
安装:$ dmhs_V4.1.2_dm8_rev99922_rh6_64_veri_20210604.bin -i

根据提示选择完整版、安装路径、统一部署、依赖库路径、内置数据库配置、内置数据库服务自动启动、远程控制服务自动启动、web服务自动启动、根据提示切换到root执行脚本

查看内置数据库版本:select name,instance_name,svr_version from v$instance;

环境变量:

dm8数据库安装路径:/dm8

dmhs安装路径:/home/dmdba/dmhs

[dmdba@dmtest1 log]$ echo $LD_LIBRARY_PATH

:/home/dmdba/dmhs/bin:/home/dmdba/dmhs/db/bin:/dm8/bin

  • dmhs配置
  • 配置DDL
  • 辅助表方式(源端数据库):

    如果要求 DDL 同步,那么需要创建 DDL 触发器和辅助表。创建的脚本参见 DMHS安装目录下 scripts 子目录中“ddl_sql_*.sql”。注意创建时需要使用 SYSDBA 用户。(使用管理工具创建不会报错)

  • 执行脚本:`/home/dmdba/dmhs/scripts/ddl_sql_dm8.sql
    查询创建的对象:
    SQL> select owner,table_name from dba_tables where owner='SYSDBA'          
    and table_name like 'DMHS%' and status='VALID';
    SQL> select owner,trigger_name from dba_triggers where owner='SYSDBA'
       and trigger_name like 'DMHS%' and status='Y';
    

    捕获器cpt&执行器exec

捕获器:
DMHS配置需要设置管理端口号(mgr_port)和数据端口号(data_port),需要提供两个端口号,并确保可以使用。
在配置之前需要明确连接源端数据库的用户(db_user)及密码(db_pwd),该用户需要具有操作待同步表 的权限。
确定是否有DDL同步需求,如果有,确定待同步的对象如表、视图、存储过程、函数、序列等,并且 需要确定对象的操作如创建、删除、修改等。根据此同步需求设置ddl_mask参数值。
确定源端数据库的归档日志是否需要DMHS进行处理如删除、保留或转移。依据此需求设置clear_flag 参数值。
确定需要进行数据同步的用户表(白名单及黑名单)及同步映射关系,并据此需求,完成filter及map 元素项的参数值设置。

执行器:
准备执行器管理端口号(mgr_port)和数据端口号(data_port),需要提供两个端口号,并确保可以使用。 
执行器中连接目标数据库的用户(db_user)及密码(db_pwd),该用户需要具有操作待同步表的权限。
在软件安装服务器上(源端):
配置说明:
添加列映射规则:
<map><!-- 列映射规则-->
      <!-- 模式名.表名==模式名.表名-->
      <tableitem>
            <tablename>源表名</tablename>
            <type>过滤类型</type>
            <colitem>映射规则</colitem>
</tableitem>
</map>
需要DDL同步的配置文件:
在cpt模块添加配置:
<ddl_mask>op:obj</ddl_mask> <!--DDL 配置项-->
在send发送模块添加配置:
<trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 --> 
<constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 --> 
<identity>1</identity> 
<net_turns>0</net_turns>

siteid 全局唯一,即 DMHS 同步系统涉及的所有节点的 siteid 必须全局唯一,不允 许有重复值
DDL 配置项,如果不需要 DDL 同步,那么就配置为空,即, 相应地 DMHS DDL 触发器和辅助表也不需要创建。
归档清理配置项,clear_flag 为 1 表示清除,即 DMHS 将同步完成的归档文件删除; 为 2,表示将同步完成的归档移到 bak_dir 目录下;为 0,表示不作任何操作。 
过滤配置项,本示例配置了白名单,即 enable,也可以配置黑名单,详见 DMHS 用户手册。其过滤的规则是:先判断白名单,然后判断黑名单。如果存在重叠的情况,那么 也是会被过滤的。
映射配置项,表示存在不同模式之间的表同步,例如本示例中源端的 SYSDBA 模 式下的表映射成目的端的 DMHS 模式下同名的表。

$vim /home/dmdba/dmhs/bin/dmhs.hs

源端:

<?xml version="1.0" encoding="GB2312" ?>
<dmhs>
   <base>
      <lang>ch</lang>
      <mgr_port>5345</mgr_port>
      <chk_interval>3</chk_interval>
      <ckpt_interval>60</ckpt_interval>
      <siteid>1</siteid>
      <version>2.0</version>
   </base>
   <cpt>
      <db_type>DM8</db_type>
      <db_server>127.0.0.1</db_server>
      <db_user>SYSDBA</db_user>
     <db_pwd>SYSDBA</db_pwd>
      <db_port>5236</db_port>
      <db_name></db_name>
      <idle_time>10</idle_time>
      <parse_thr>1</parse_thr>
      <ddl_mask>op:obj</ddl_mask> <!--DDL 配置项-->
      <arch>
            <clear_interval>60</clear_interval>
            <clear_flag>1</clear_flag>
            <bak_dir></bak_dir>
        </arch>
         <send>
            <ip>192.168.89.129</ip>
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port>
            <trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 --> 
            <constraint>1</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 --> 
            <identity>1</identity> 
            <net_turns>0</net_turns>
            <filter><!--配置过滤项-->
                  <enable><!—白名单-->
                        <item>SYSDBA.*</item>
                  </enable>
                  <disable> </disable><!-- 黑名单 -->
            </filter>
            <map><!-- 映射规则-->
                  <!-- 模式名.表名==模式名.表名-->
                  <item>SYSDBA.*==SYSDBA.*</item>
            </map>
         </send>
   </cpt>

目的端:

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
   <base>
      <siteid>2</siteid>
      <mgr_port>5345</mgr_port>
      <chk_interval>3</chk_interval>
      <ckpt_interval>60</ckpt_interval>
      <lang>ch</lang>
      <version>2.0</version>
   </base>
   <exec>
      <recv>
         <mgr_port>5345</mgr_port>
         <data_port>5346</data_port>
      </recv>
      <db_type>DM8</db_type>
      <db_server>127.0.0.1</db_server>
      <db_port>5236</db_port>
      <db_user>SYSDBA</db_user>
      <db_pwd>SYSDBA</db_pwd>
      <recv_caches>8</recv_caches>
      <exec_thr>4</exec_thr>
     <exec_sql>1024</exec_sql>
     <exec_trx> 5000 </exec_trx>
     <exec_rows>1000</exec_rows>
   </exec>
</dmhs>

启动dmhs:

源端:

目标端:

新开窗口:

源端目的端执行dmhs_console:

目标端:

cd /home/dmdba/dmhs/bin

./dmhs_console

DMHS> connect 192.168.89.129:5345

 源端:

cd /home/dmdba/dmhs/bin

./dmhs_console

DMHS> connect 192.168.89.128:5345

目标端执行DMHS> start exec

源端执行:DMHS> copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX

源端开启同步:

DMHS> start

创建服务(源端&目标端):

cd /home/dmdba/dmhs/scripts/root/

#  ./dmhs_service_installer.sh -t dmhs_server -d /home/dmdba/dmhs/bin/ -p hs -x /home/dmdba/dmhs/bin/dmhs.hs

服务方式启动:

cd /home/dmdba/dmhs/bin

./DmhsServicedmhcpt start

常见错误

1、MGR[ERROR]:库文件libdmhs_exec.so未找到,出错:0

ldd找不到libdmhs_exec.so
[dmdba@ dmtest2 bin]$ cd /home/dmdba/dmhs/bin
[dmdba@dmtest2 bin]$ ldd libdmhs_exec.so
	linux-vdso.so.1 =>  (0x00007ffc429f4000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ffb81220000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ffb80f1e000)
	librt.so.1 => /lib64/librt.so.1 (0x00007ffb80d16000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffb80afa000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007ffb808f6000)
	libdmhs_pub.so => ./libdmhs_pub.so (0x00007ffb805ca000)
	libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007ffb8006f000)
	libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00007ffb7fe5a000)
	libdmhs_cvt.so => ./libdmhs_cvt.so (0x00007ffb7fbd1000)
	libdodbc.so => /dm8/bin/libdodbc.so (0x00007ffb7f9a5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ffb8199d000)
	libdmhs_exp.so => ./libdmhs_exp.so (0x00007ffb7f5d0000)
	libdmhs_xml.so => ./libdmhs_xml.so (0x00007ffb7f3c1000)
	libdmoci.so => not found    <-------------此处显示not found
	libdmdpi.so => /dm8/bin/libdmdpi.so (0x00007ffb7e753000)
	libdmfldr.so => /dm8/bin/libdmfldr.so (0x00007ffb7db23000)
	libdmelog.so => /dm8/bin/libdmelog.so (0x00007ffb7d91c000)
	libdmutl.so => /dm8/bin/libdmutl.so (0x00007ffb7d70a000)
	libdmclientlex.so => /dm8/bin/libdmclientlex.so (0x00007ffb7d4d7000)
	libdmos.so => /dm8/bin/libdmos.so (0x00007ffb7d2ab000)
	libdmcvt.so => /dm8/bin/libdmcvt.so (0x00007ffb7cbcc000)
	libdmstrt.so => /dm8/bin/libdmstrt.so (0x00007ffb7c9b8000)
	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007ffb7c6b1000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ffb7c49b000)
	libdmmem.so => /dm8/bin/libdmmem.so (0x00007ffb7c28e000)
	libdmcalc.so => /dm8/bin/libdmcalc.so (0x00007ffb7c009000)

解决办法:

[dmdba@dmtest2 bin]$ cd /home/dmdba/dmhs/bin
[dmdba@ dmtest 2 bin]$ find -name libdmoci.so
./stat/libdmoci.so
[dmdba@dmtest2 bin]$ echo $LD_LIBRARY_PATH
:/home/dmdba/dmhs/bin:/dm8/bin
[dmdba@dmtest2 stat]$ cd /home/dmdba/dmhs/bin/stat/
./stat/libdmoci.so
[dmdba@dmtest2 stat]$ cp libdmoci.so /home/dmdba/dmhs/bin/
[dmdba@dmtest2 bin]$ ldd libdmhs_exec.so
	linux-vdso.so.1 =>  (0x00007ffc9a1f7000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f08e62c2000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f08e5fc0000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f08e5db8000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f08e5b9c000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f08e5998000)
	libdmhs_pub.so => ./libdmhs_pub.so (0x00007f08e566c000)
	libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007f08e5111000)
	libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00007f08e4efc000)
	libdmhs_cvt.so => ./libdmhs_cvt.so (0x00007f08e4c73000)
	libdodbc.so => /dm8/bin/libdodbc.so (0x00007f08e4a47000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f08e6a3f000)
	libdmhs_exp.so => ./libdmhs_exp.so (0x00007f08e4672000)
	libdmhs_xml.so => ./libdmhs_xml.so (0x00007f08e4463000)
	libdmoci.so => ./libdmoci.so (0x00007f08e39f4000)  <---- 此处已有内容
	libdmdpi.so => /dm8/bin/libdmdpi.so (0x00007f08e2d86000)
	libdmfldr.so => /dm8/bin/libdmfldr.so (0x00007f08e2156000)
	libdmelog.so => /dm8/bin/libdmelog.so (0x00007f08e1f4f000)
	libdmutl.so => /dm8/bin/libdmutl.so (0x00007f08e1d3d000)
	libdmclientlex.so => /dm8/bin/libdmclientlex.so (0x00007f08e1b0a000)
	libdmos.so => /dm8/bin/libdmos.so (0x00007f08e18de000)
	libdmcvt.so => /dm8/bin/libdmcvt.so (0x00007f08e11ff000)
	libdmstrt.so => /dm8/bin/libdmstrt.so (0x00007f08e0feb000)
	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f08e0ce4000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f08e0ace000)
	libdmmem.so => /dm8/bin/libdmmem.so (0x00007f08e08c1000)
	libdmcalc.so => /dm8/bin/libdmcalc.so (0x00007f08e063c000)

2、

源端copy报错:

MGR[ERROR]: 库文件 libcpt_dm8.so 未找到, 出错: 0

环境变量添加:

/home/dmdba/dmhs/db/bin 

达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心 (dameng.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DHY151

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值