DM数据实时同步软件

DM数据实时同步软件

产品介绍

概述

  • 达梦数据实时同步软件(DMHS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实时同步复制。

  • DMHS 基于成熟的关系数据模型和标准接口,支持多种软硬件平台,能够灵活的配置出一对一、一对多、多对一、多对多以及级联等多种形式的复制拓扑结构,可以广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域。

    在这里插入图片描述

产品特点
  • 高通用性
    • 跨平台软硬件支持:面对复杂的计算机环境有极好的适应性
  • 灵活可调配
    • 体系结构高可扩展性:开放式的体系结构可以实现多种复制拓扑结构
    • 数据同步内容可定制:支持数据筛选、过滤、转换、压缩和加密
    • 轻量级设计实现快速部署:能够在不中断业务的情况下,将主机数据库中的当前数据平滑地装载到备机数据库中
  • 性能良好
    • 确保业务系统高可用:复制对主机源数据库系统几乎无影响,备机可实现业务系统的快速切换和恢复
    • 高效的数据实时同步:采用并行处理技术实现大批量数据的实时复制
    • 可读写的备机系统:可以实现生产型业务与分析型业务相隔离的多业务中心
  • 传输可靠
    • 高可靠的数据传输:严格按照主机业务系统事务顺序实施数据复制,保障备机数据库与主机数据库的事务级完整性和一致性
支持多种异构数据平台
  • DMHS 可以支持多种异构数据平台,可以根据用户需求采用非常灵活的方式配置出各种拓扑结构。
    • 源数据库可支持 DM 各系列、Oracle9i、Oracle10g、Oracle11g、Oracle12c、Oracle19c、ORACLE RAC 集群、DB2、PostgreSQL、MySQL 等
    • 目的数据库支持具有 ODBC 标准接口实现的各种主流关系数据库管理系统,目前适配过的数据库有 DM 各系列、DM 集群、Oracle9i、Oracle10g、Oracle11g、Oracle12c、Oracle19c、ORACLE RAC 集群、DB2、Sybase、SQLServer、PostgreSQL、MySQL 等
  • DMHS 支持多种计算机操作系统平台。
    • 支持 Windows 系列、Linux 系列、IBM AIX、HP-UNIX 系列、Solaris 系列、国产操作系统 Kylin、Rocky 等 32 位和 64 位操作系统
  • DMHS 支持多种复制结构,支持不同厂商硬件(主机、存储)之间数据库的数据复制。
    • DMHS 支持一对一同步 、一对多广播型同步 、多对一聚合型同步 、双向同步、多对多同步、多级中转级联同步等多种数据同步形式,支持组合多种同步形式以搭建复杂的拓扑结构
    • DMHS 支持主流厂商的硬件(主机、存储)之间数据库的数据复制,例如 IBM、HP、联想、华为、浪潮、曙光等硬件厂商,兼容多种硬件体系,可运行于于 X86、SPARC、POWER 等硬件平台之上,还支持龙芯、鲲鹏、飞腾、海光、兆芯、神威等国产 CPU 硬件平台,产品实现了平台无关性
高可靠的数据复制能力
  • DMHS 对复制的数据内容做 CRC 校验,保证收到的数据是可靠无误的;DMHS 对复制数据先后顺序也做严格的一致性验证,保证数据复制传递过程是有序的。
  • DMHS 使用检查点机制实现断点续传。断点包括两个部分,即 DMHS 前置的变化数据捕捉模块数据抽取位置检查点和 DMHS 主程序的数据装载模块的已装载位置检查点。
    • 前置模块与主程序模块采取完备的消息应答机制来保障数据传输的可靠性和数据完整性
  • DMHS 的数据复制是通过分析源数据库的日志后以源端事务为单位发送给目标数据库的,源数据库日志中记录的事务是严格有序的,目标数据库严格按照源数据库上的事务顺序在目标数据库上实施数据复制同步。
支持数据库的所有主流类型字段
  • DMHS 支持目前主流所有数据库的数据类型字段同步。
    • 数值类型 (NUMBER、NUMERIC、DECIMAL、DEC、INTEGER、INT、SMALLINT、FLOAT、REAL、DOUBLE PRECISION、BINARY_FLOAT、BINARY_DOUBLE)
    • 字符类型 (CHAR、VARCHAR、NCHAR、NVARCHAR2)
    • 二进制数据类型 (BINARY、VARBINARY)
    • 时间日期类型 (DATE、TIME、DATETIME、INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND)
    • 大对象类型 (CLOB、BLOB、NCLOB、LONG、LONG RAW) 等

系统组成

  • DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行

    在这里插入图片描述

    • 管理模块(MGR)是 DMHS 同步服务的启动框架,根据配置文件加载并启动相关的功能模块:
      1. 捕获模块(CPT)
        • 对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。
        • DMHS 源端针对每一种支持的关系型数据库系统,均提供有相应的日志捕获分析模块,用以识别和解析不同的关系型数据库系统的日志数据。
      2. 装载模块(LOAD)
        • DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。
          • 表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。
        • 数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式。
          • 直接的数据装载方式基于源数据库数据的直接查询抽取装载;
          • 备份文件装载方式则是基于数据库自身的数据备份还原,将源库初始数据备份后在目标库进行还原达到初始数据一致。
            • 备份文件装载方式要求源库和目标库为同一类型的数据库系统,目前 DMHS 仅支持 DM 数据库的备份文件装载方式。
        • 初始装载使用 LOAD/COPY 控制台命令,该命令可以在不中断源数据库服务的情况下把源表初始基础数据装载到目的库上,同时配合日志分析模块完成该表后续的增量数据同步。
      3. 传输模块(NET)
        • NET消息发送子模块
          • 经过 CPT 捕获到的日志操作,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息中的列进行映射(改名、剔除和函数计算)。经过处理的消息通过网络(TCP/IP)发送给下一级,或者保存到本地文件。
        • NET消息接收子模式
          • 经上一级 NET 消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。
          • 上一级 NET 消息发送子模块保存消息的本地文件目录,既可以是一般的本地文件目录,也可以是提供 FTP 服务的 FTP 文件目录。
            • 当上一级NET消息发送子模块将消息保存在一般本地文件目录时,NET 消息接收子模块读取本地文件并发送给 EXEC 模块;
            • 当上一级 NET 消息发送子模块将消息保存在 FTP 文件目录时,NET 消息接收子模块可通过 FTP 服务器下载数据,并发送给 EXEC 模块。
        • NET 模块还能够单独实现转发和路由功能,这两个功能需要在配置文件中独立配置,通过转发和路由功能实现多对多、一对多、文件中转和 FTP 中转的高级功能
      4. 执行模块(EXEC)
        • DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步。
        • EXEC 模块使用多线程并行执行的方式,对多个提交事务同时进行入库执行,以提高入库执行的效率。
        • EXEC 模块还可以通过事务合并、事务分裂等事务重组技术,以及 rowid 映射、批量绑定执行等技术加快同步执行的效率。

功能划分

  • 捕获器
    • 捕获器将源端数据库日志读取解析后发送出去,它必须与源端数据库在同一台机器上。
    • 捕获器由MGR模块、CPT模块、NET发送子模块组成。NET 发送子模块不能单独存在,必须由CPT模块调用。
    • 捕获器中包含日志分析模块CPT,由于日志分析需要用到数据库中的表信息,所以捕获 器在首次启动时,要进行初始化加载需要同步的表的字典信息,把这些信息存放到本地。
  • 执行器
    • 执行器将接收到的数据入库执行,它可以与目标端数据库处于不同机器。
    • 执行器由MGR模块、
    • EXEC模块、NET接收子模块组成。NET接收子模块不能单独存在,必须由EXEC模块调用。
    • 执行器中的主要模块EXEC模块,主要用来进行数据入库,为了兼容大多数的数据库, 它采用了标准的ODBC驱动接口和符合SQL92标准的SQL语句来访问数据库。
  • 路由器
    • 路由器一般配置在第三台机器上,对捕获器中CPT模块和执行器中的EXEC模块进行 映射,从而实现跨网关同步,并且一个路由服务可以实现N对N的映射。
    • 路由器由MGR 模块、NET接收子模块、NET发送子模块组成。NET 接收子模块和NET发送子模块由MGR模块调度,从而实现路由功能。
    • 路由器适用在捕获器和执行器被网关隔断的环境,捕获器中的CPT模块和执行器中的 EXEC模块无法通过NET(捕获器的NET发送子模块及执行器的NET接收子模块)实现网络直连,需要经过第三台机器中转的情况。
  • 转发器
    • 转发器将接收到的数据通过网络进行转发或是直接落地成本地文件。
      • 网络转发可以实现异步的一对多的需求,而落地成本地文件可以实现 FTP的同步模式或者穿透网闸的需求。
    • 转发器由MGR模块、NET接收子模块、NET发送子模块组成。NET 接收子模块和NET 发送子模块由MGR模块调度,从而实现转发功能。
    • 转发器适用在一个捕获器需要对应多个执行器的环境,或者捕获器和执行器之间存在物 理隔离网闸,无法通过网络直连需要通过文件中转的情况。

管理模块(MGR)

​ 管理模块(MGR)是同步服务的启动框架,根据配置文件加载并启动CPT、EXEC或NET 模块,从而提供完善的捕获器功能、执行器功能、路由器功能或转发器功能。

MGR原理

  • MGR模块可以解析配置参数,根据配置参数启动DMHS的捕获器功能、执行器功能、 转发器功能或路由功能。

    • 当MGR启动捕获器功能时,MGR会调度CPT模块和NET模块 (发送子模块);
    • 当启动执行器功能时,会调度NET模块(接收子模块)和EXEC模块;
    • 当启动转发器或路由器功能时,会调度NET模块(接收子模块和发送子模块)。
  • MGR模块主要组成部分:

    在这里插入图片描述

    • 配置参数解析:
      • 负责解析用户的dmhs.hs配置文件。默认读取安装程序目录中bin文件 夹下的dmhs.hs文件,也可由用户指定。
      • 还负责修改配置。用户可通过客户端管理工具修改配置,修改后的配置参数会被写入安装程序目录中bin文件夹下的dmhs.hs文件中。
    • 统计信息入库:对采样的统计信息进行入库处理。
    • 内置FTP服务器:负责将日志解析的数据发送到本机内置FTP服务器。在进行一对多的数据实时同步环境中,可以通过启用FTP 被动传输功能,从而避免多条数据链路对数据发送效率的影响。
    • 同步服务主备:负责源端DMHS服务的故障切换。此功能仅针对捕获器。
    • 服务器控制台:服务器命令行人机交互界面
    • 消息接受/处理反馈:负责接收服务器控制台/客户端控制台/WEB管理工具控制台命令,并返回执行结果。
    • 任务调度:负责调度CPT模块、EXEC模块、NET模块,用以提供捕获器、执行器、转发器或路由器功能。

MGR基本配置

​ MGR模块必须在配置文件中设置站点号和管理端口号,并给出正确的参数值,否则MGR模块无法正常启动。

  • 站点号siteid

    • MGR 模块站点号对应XML文件中的元素名为siteid,siteid 的元素值即为站点号的参数值。
    • 每个DMHS服务必须有唯一标识,即站点号;在一个数据实时同步系统中,站点号不能重复,取值范围是1到30000。

    注意:

    == 当数据源是DM6、SQLServer、PostgreSQL数据库时,CPT标识消息的站点号是siteid配置值和同步库的DBID相加之和==

  • 管理端口号mgr_port

    • MGR管理端口号用于监听该端口上的连接,用于执行客户端工具发过来的命令和用来接收统计信息,取值范围在1000~ 65535。
  • 语言选项lang

    • 服务器控制台输出日志语言设置,ch代表简体中文;en代表英文,默认是ch。
  • 检查点间隔ckpt_interval

    • 当同步服务中存在EXEC模块时,该参数表示EXEC模块检查点刷新的时间间隔,单位为秒,默认是60秒,取值范围在10~ 65535。
  • 配置文件版本号version

    • 配置文件的版本号,可选1.0或2.0。默认值为1.0,兼容旧版本配置格式。

MGR可选功能

  • 统计信息
    • 用于WEB客户端显示历史曲线图。
  • 内置FTP
    • 当同步需要搭建一对多的同步架构时,特地开发了被动FTP传输的功能,为提高软件易用性提供了内置FTP功能,不需要额外配置FTP服务器。
  • 数据库登录口令加密
    • DMHS 配置文件中记录有数据库管理系统的登录口令,为了避免配置文件泄露用户信 息,提供了加密选项。
      • 需要通过控制台工具(dmhs_console)获得相应密文,再将密文写入配置文件。
  • 日志记录策略
    • 方便用户分析问题,在默认情况 下DMHS运行的错误消息和正常消息都记录在一个日志文件中。
    • 用户可以通过配置文件的 设置,将DMHS运行的错误消息和正常消息分开记录。
  • DMHS主备
    • DMHS支持源端为达梦数据库集群以及ORACLE RAC环境的实时数据同步, 支持数据同步的主备服务。
    • 基本原理:
      • DMHS主备采用注册连接以及优先级策略来由目标端进行主机的选取。
      • DMHS 源端在与目标端建立连接时,首先需要注册本次连接的信息,并由目标端返回是否可以作为主机的信息。
      • 源端DMHS根据返回值进入主机状态,启动日志分析进行数据同步;或者进入备机状态,进行状态监测等待接管。
      • 源端DMHS需要周期性的监测所在服务器上的数据库的状态,并将状态发送给目标端进行更新。
    • 使用说明:
      • 启用DMHS主备功能,需要在base项中配置group参数,并且赋值为1。默认赋值为0,不启用。
      • 目前 DMHS主备支持DM7数据库主备、DM8主备、DM8 DSC以及Oracle RAC集群

装载模块(LOAD)

离线字典

  • DMHS 是通过解析交易日志来实现获取数据库数据的增量变化;但在交易日志中,并不会记录对象的定义,而是使用一个标识(对象 id)来代表操作对象。CPT 模块在分析交易日志的过程中,需要通过对象id来获取对象定义。

  • 功能简介
    • 离线字典主要是为CPT模块提供准确的表定义信息。离线字典默认存在在DMHS安装目录DICT目录,可修改配置文件指定离线字典的存放路径。
    • 离线字典文件是以表为单位进行保存,文件名为cptvid_表id.dct。离线字典文件中包含表名、表的所有列信息以及表的版本信息等。
  • 实现原理
    • 离线字典的生成
      1. 通过装载命令COPY生成。在装载表的时候,如果添加掩码DICT,则所有装载的表都会在源端生成离线字典文件,此时离线字典文件表信息版本号为装载表时,数据库的当前LSN。
      2. DMHS在同步过程中产生。当在同步过程中,如果源端数据库存在创建表的操作,同时该表为需要同步的表,CPT 模块会将该表的信息生成离线字典,离线字典的版本为创建表操作的数据库LSN。
    • 离线字典信息的修改及删除
      • 交易日志中每个记录表的DDL操作,都会引起离线字典信息的修改。
      • 当解析到一个表DDL操作时,CPT模块会对该表生成一个新版本的字典,新的表字典版本信息为DDL操作的数据库LSN,同时CPT模块也会将内存中该表的字典信息修改为新的字典信息。
    • 离线字典的使用
      • CPT 模块在启动时,会读取所有字典文件,然后根据最小 LSN,加载正确版本的表字典。当源端数据库创建表时,CPT模块会将新表的表信息存放到离线字典中,表信息为当前DDL操作时数据库LSN。

字典装载

  • 字典装载操作需在dmhs_console工具中输入运行,字典装载可使用命令:

    COPY <VID> "<过滤条件>" DICT  
    
    • COPY:字典/数据装载命令。
    • VID:日志捕获模块的虚拟编号,该编号从0开始,与DMHS配置文件中日志捕获相同。
    • 过滤条件:装载表对像的过滤条件,其中SCH.NAME对应源库的模式别名,TAB.NAME对应源库中的表别名,必须像写查询语句WHERE条件一样的拼写出要装载表对像的过滤表达式。
  • 字典装载使用 DICT 掩码,该掩码可与其他数据装载掩码同时使用,在这种情况下,DMHS会首先进行字典装载,然后进行数据装载。

数据装载

  • 数据装载是通过同步表某个时刻数据的方式实现的,在查询表数据之前,需要对表上S锁。

  • 数据装载命令格式:
    • 数据装载操作需在dmhs_console工具中输入运行,数据装载命令格式为:

      COPY <VID> "<过滤条件>" <装载选项>  
      
    • 数据装载命令完成之后,会将所有满足过滤条件的表数据都发送到执行端,执行端将数据入库。当某个表数据入库完成之后,会在表DMHS_TABLE_SEQID中插入一行同步表的数据,DMHS_TABLE_SEQID表中的数据影响装载选项CONTINUE的操作结果。

  • 使用限制
    • 由于要对表上S锁,所以查询语句结束之前,无法对表进行数据修改操作,对于不存在多版本的数据库,会影响数据库的使用;
    • 当表数据量过大时,对于多版本的数据库,会出现“版本过旧”或者“快照过老”导致读取结果集失败的问题;
    • 装载数据之前,需确定执行端数据与源端数据没有冲突;

备份装载

  • 备份装载是一种特殊的数据装载方式,,执行端数据库需使用源端备份文件还原数据库,装载过程中,部分操作需人为操作。

  • 备份装载命令格式:
    • 数据装载操作需在dmhs_console工具中输入运行,数据装载命令格式为:

      COPY <VID> "<过滤条件>" BACKUP|其他装载选项
      
    • 备份装载是将源端数据库备份文件,发送到执行端,执行端利用SQL语句,利用备份文件还原目的端数据库。还原之后,执行端通过备份文件中的信息,决定哪些事务需要入库。

  • 使用限制
    • 库级别备份限制:
      • 版本限制:
        • 源端数据库为DM6 2015.6.17之后的版本,并且源端与执行端数据库类型相同。
        • 源端数据库为DM7 2018.11.7之后的版本,支持了SF_BAK_GET_START_LSN和SF_BAK_GET_END_LSN 两个函数,并且源端与执行端数据库类型相同。
        • 源端数据库为 DM8 时,检测支持 SF_BAK_GET_START_LSN 和SF_BAK_GET_END_LSN两个函数,并且源端与执行端数据库类型相同。
      • DM6数据库备份策略必须为异步备份,及设置dm.ini中BAK_POLICY=1,DM7、DM8无此限制。
      • 执行端需同步的数据库处于脱机状态。
      • 执行端设置同步用户的默认数据库,不能为需同步的数据库。
      • 备份文件备份时间点之后的归档文件,必须都存在。
    • 表级别备份限制:
      • 目前仅支持DM7、DM8版本。
      • 表备份采用备份集方式
      • 源-目标连接方式:联机-联机(且启动exec)
      • 支持对用户的非分区行存储表和堆表进行备份。
      • 表备份时,其所属表空间必须处于联机状态。
      • 表还原支持跨库,但相关参数必须一致,如页大小、大小写敏感等

捕获模块(CPT)

​ CPT 模块部署在源端数据库,其作用是对源端数据库的增量数据进行抽取。

CPT原理分析

  • CPT 模块在启动时,会利用NET模块,向对端发送获取起始LSN的命令。CPT模块找到起始LSN对应的交易日志位置,从该位置开始读取交易日志进行分析。

  • CPT模块主要组成部分如下:

    在这里插入图片描述

    • 日志读取线程:负责交易日志数据的读取。
      • 该线程从交易日志中读取文件数据,按照数据库中定义的逻辑单元,对文件数据进行分割,并将分割后的逻辑单元添加到日志分析链表中。
    • 日志分析线程:负责对日志逻辑单元进行解析。
      • 该线程从日志分析链表中获取第一个逻辑单元,根据不同的逻辑命令,解析逻辑单元。
    • 日志发送线程:负责与NET模块进行交互。
      • 该线程从发送链表中获取DMHS消息,调用NET模块功能,将将DMHS消息根据过滤规则发送到目标端或丢弃。
    • 日志文件处理线程:负责交易日志信息的处理及物理文件的处理。
      • CPT 模块在运行过程中,根据最小LSN对交易日志进行处理,当交易日志开始的LSN小于最小LSN时,表示该交易日志已经分析完成,交易日志的信息可以进行处理。

CPT基本配置

  • CPT模块的所有参数都是作为cpt元素的子元素存在,这些子元素的值就是对应CPT模块参数的参数值。
  • CPT模块需配置三个部分:
    • 日志捕获包含源端数据库管理系统的连接信息,如果源端为基于共享存储的集群系统,则还需要配置集群相关信息。
    • 日志文件清理必须配置日志处理策略,在配置文件中存放于arch元素中。
    • 日志捕获中必须配置NET发送子模块send,在配置文件中存放于send元素中

CPT可选功能

  • 同步DDL操作
    • DMHS 支持DDL操作同步,可通过在配置文件中配置ddl_mask 掩码来实现,该掩码默认值为TABLE:OP。
      • 支持的源端数据库管理系统:ORACLE、ORACLE RAC、DM7、DM6、DM8、POSTGRESQL、MYSQL、DB2
      • 支持的对象有:表、视图、存储过程、函数、触发器、索引、约束、序列、包、TYPE类型、同义词、表空间、用户、角色、模式、权限
      • 支持的操作:CREATE、ALTER、DROP、TRUNCATE、GRANT、REVOKE
  • 日志分析控制掩码
    • DMHS提供日志分析行为控制掩码,用于配置日志分析CPT模块的日志分析行为。通过在配置文件中指定cpt_mask标签元素的值,来设定CPT模块不同的日志分析行为。
    • CPT 模块的日志行为主要有,日志读行为;日志分析行为;日志投递行为;日志保存行为;日志保存压缩;日志分析切换。
      • 默认日志行为
        • 当cpt_mask 没有指定参数值时,DMHS启用默认的CPT日志行为:在线读取数据库日志,并对读取的日志进行分析,然后对分析的日志进行投递
      • 离线日志分析
        • 在仅有数据库归档文件的情况下,DMHS 还支持离线日志分析的功能。同时需要进一步在arch标签中设置dir子标签的值为离线归档日志文件的路径。
      • 日志本地备份及分析
        • 日志本地备份会在本地服务器生成后缀为.rec的日志文件;DMHS提供本地备份日志分析功能,来解析存储的本地备份日志文件。
      • 日志远程备份及分析
        • 日志远程备份时,CPT 模块在读取源端数据库日志后,会将日志数据发送至下一级的DMHS接收端;DMHS 接收端使用文件中转的配置,将日志数据接收后以文件的形式进行存储,文件的后缀为.dat。

传输模块(NET)

​ 传输模块NET应用于捕获器CPT、路由器ROUTE、转发器TRANSFER、执行器EXEC,分为接收子模块(RECV)与发送子模块(SEND),在同步中承担节点之间数据的收发任务。

在这里插入图片描述

NET原理分析

  • NET模块是各个功能模块之间连接通信、信息交换与传输的工具,包括以下功能:
    • 表操作的过滤:同步过程中,NET 模块会根据配置,对同步的数据进行判断,如果不满足黑名单条件且满足白名单条件,则将消息发送到目标端,否则,直接丢弃
    • 列值转换及过滤:同步过程中,当需要对表数据进行转换,NET 模块会根据原始数据,计算转换后的数据,并对消息数据重新填充
    • 消息的本地存储:NET模块可将接收到的DMHS消息进行本地存储
    • 消息的本地读取:NET模块可从本地存储中读取DMHS消息,发送到目标端
    • 消息的FTP远程读取:NET模块可从远程FTP服务器中读取DMHS消息,发送到目标端
    • 消息的发送及接收:DMHS各站点之间数据的传递都是使用NET模块完成的

NET发送子模块

  • 发送子模块可供CPT、TRANSFER或ROUTE使用

    在这里插入图片描述

  • NET发送子模式
    • 存储数据到本地
      • NET 模块在投递消息时,它的下一级可以是远程/本地的目标机器,也可以是本地存储目录。当NET发送子模块配置了data_file参数时,CPT消息或NET接收子模块获取的消息就会被存储到它指定的本地目录下,以便进一步的转发。
      • 可用于捕获器、转发器,但一个捕获器中只能配置一个NET发送子模块,一个转发器中则可以配置多个NET发送子模块。
    • 发送数据到NET网络
      • 当NET模块把消息以网络数据发送时,需要配置DMHS下一级数据接收的IP地址,下一级可以为远程机器,也可以是本地机器。
      • 将NET发送子模块配置了ip参数后,CPT消息或NET接收子模块获取的消息就会被发送到DMHS下一级NET接收子模块。
  • 数据过滤及映射
    • NET 模块可以针对待投递的消息进行一系列的筛选过滤。该功能标签为,包含和子标签,分别对应白名单和黑名单。
    • NET 模块在把对像消息投递到下一级时,允许对消息中的模式名和表名进行映射;配置映射关系后,NET模块会把这些配置发送给EXEC模块,由它来完成映射操作。
    • 过滤规则:
      • 过滤规则用于允许或禁止符合过滤条件的操作,在 SEND 配置中,必须包含过滤规则的配置
      • 流程:
        1. 首先验证黑名单,如存在,则不允许同步;
        2. 接着验证白名单,如存在,则允许同步;
        3. 如果白名单也不存在,则不允许同步。
    • 映射规则:
      • 映射规则用于源端和目的端对象的同步关系映射,在 SEND 配置中,映射规则的配置 是必须的,映射规则可包含表映射规则及列映射规则
  • 可选功能
    • 数据库对象的禁用
      • 如果NET发送子模块的下一级DMHS服务器为执行器,可根据实际情况考虑是否禁用触发器、约束、自增列、大对象。
    • 网闸模式
      • 网闸是一种单向转输的物理隔离设备,一方可以经过它自由的发送数据到另一方,但是另一方回执时,只能回执一个字节,并且该字节的值只能为0或255。
    • 数据包校验
      • NET 模块会设置投递消息的CRC校验值,下一级在接收到以后依据该值来对收到的数据包进行正确性的校验,从而提升数据的可靠性

NET接收子模块

  • 接收子模块可对网络、本地磁盘、FTP服务器获取数据

    在这里插入图片描述

  • NET接收模块
    • 数据来源于NET网络
      • NET 模块在接收消息时,它的上一级可以是远程/本地的源端机器,也可以是本地存储目录,或者是FTP服务器。
      • 当NET模块接收的消息来源于NET网络数据时,NET接收子模块必须配置为网络接收方式。
    • 数据来源于FILE本地文件
      • 当NET模块接收的消息来源于FILE本地文件时,NET接收子模块必须配置为本地文件接收方式。
    • 数据来源于内置FTP服务器
      • 当NET模块接收的消息来源于FTP服务器时,NET接收子模块必须配置为FTP服务器接收方式。
  • 可选功能
    • 数据来源于第三方FTP服务器
      • 上一级DMHS服务器不用配置内置FTP,直接将本地FTP服务器目录中数据作为本地文件转发(TRANSFER)即可。
    • 过滤
      • 当NET接收子模块的数据来源于FTP服务器时,可以对从FTP服务器下载下来的数据进一步的筛选过滤。
    • 映射
      • 当NET接收子模块的数据来源于FTP服务器时,如果上一级DMHS的发送子模块已经配置了映射,到了本级同样会生效,如果跟本级DMHS NET接收子模块中的映射相冲突,则以本级优先。

执行模块(EXEC)

EXEC原理分析

  • DMHS在数据同步时,源端不同数据库的交易日志经过CPT的解析,封装成统一的数据格式,经过NET模块一级级的投递,最后投递到EXEC模块进行入库处理,当EXEC模块把接收到的事务入库以后,该事务的同步流程才算正式完成。

    在这里插入图片描述

    • 辅助表
      • 当 EXEC 模块启动时,它会在目标库上初始化一系列的表来记录同步的信息(简称辅助表),这些辅助表对DMHS的同步来说非常重要,随意的删除或是修改其中的内容会引 起无法预期的后果
        • DMHS_TRXID_TABLE:记录了源端事务日志中的事务入库信息
        • DMHS_ERROR_TSK_TABLE :出错事务登记表
        • DMHS_TABLE_SEQID :装载信息登记表
        • DMHS_DTYPE_MAP:类型映射信息表
        • DMHS_ERROR_TABLE:记录入库出错的表
  • 事务缓存

    • 在处理事务时,首先要对事务数据进行收集归类,通过事务ID把同一个事务的操作都归到一起。
  • 事务合并和分裂

    • 数据库的事务提交相对事务中的修改操作来说需要花费更多的时间,事务在提交时,数据库需要等待前面操作产生的日志刷盘以后才能返回其结果,确保事务的一致性(ACID)。
  • 执行策略

    • 执行线程在把事务操作入库时,会有很多种原因导致事务入库失败。
    • 三种策略:
      • 当配置为0时,出错时丢弃掉该事务后继续执行
      • 当配置为1时,出错后EXEC模块会主动终止DMHS进程,防止错误进一步扩散
      • 当配置为2时,出错后EXEC模块只会丢弃当前出错的操作
  • 提交策略

    • EXEC模块提供四种提交策略:
      1. 配置为0:严格按照事务提交的顺序来提交事务。
      2. 配置为1:不相关的表并行提交,相关的表串行执行。
      3. 配置为2:不相关的表并行提交,相关的表按事务的提交顺序提交。
      4. 配置为3:提交策略按配置为0的方式执行,但是在事务操作入库时,事务操作先按表归类,实现相同的操作批量入库。
  • 执行线程

    • 执行线程主要负责事务数据的入库,它可以配置一个或多个,由exec_thr参数决定。
    • 每个执行线程都会和目标端数据库建立一个持久的数据连接来进行交互,在配置多个执行线程的情况下,数据库的连接数也会相应的增加。
  • 检查点

    • EXEC模块需要像数据库一样定期的设置一个保存点来保存当前同步的进度,方便清理表。
    • 检查点由MGR的调度模块发起,需要在base节点下使用参数ckpt_interval来控制检查点的执行频率。

EXEC基本配置

  • EXEC模块的所有参数都是作为exec元素的子元素存在,这些子元素的值就是对应EXEC模块参数的参数值。

  • 数据库连接信息
    • EXEC 模块在进行数据入库时采用了标准的ODBC 驱动接口来访问数据库。需要配置的参数:
      • 数据库类型db_type、数据库IP或 服务名db_server、数据库用户名db_user、数据库密码db_pwd、数据库端口号db_port、默 认数据库名db_name

可选功能

  • DDL同步
    • 在异构或是数据库对像不对等的情况下,EXEC模块在同步DDL操作时有可能会报错,这需要定期巡检来发现错误并进行修正。
    • EXEC模块提供了两个参数ddl_log和ddl_continue,ddl_log参数负责控制是否记录EXEC模块执行过的所有DDL SQL语句。
  • 快速装载
    • 属于EXEC模块的功能插件,基于OCI的DIRPATH系列接口开发,专门为目标端数据库为DM7或ORACLE 数据库时提供数据的快速初始化服务。
  • 软删除功能
    • DMHS执行器提供soft_op 功能配置用于对目标端同步表进行误删除备份。
    • 当源端数据库表执行DROP或TRUNCATE操作,同步到目标端数据库后,执行器根据软操作的配置,首先对目标端同步表在同步模式下进行备份处理,然后再执行同步操作。
  • 数据冲突策略功能
    • 目前DMHS仅实现采用源数据的冲突策略,即当DMHS执行器在同步DML操作失败(数据冲突)时,使用源端获胜的策略,将源端的数据应用到目标端。
  • 事务过滤功能
    • DMHS借助辅助表DMHS_SQL来实现事务或操作过滤的功能。
  • 数据回调功能
    • DMHS执行器在向目标数据库插入同步数据时,支持函数回调和SQL回调两种方式对同步的数据进行修改以适应同步需要。
    • 源端数据库的数据同步到目标端后,目标端DMHS日志接收模块首先接收日志数据,然后根据配置的数据回调功能,通过回调函数或者回调SQL修改同步数据,最后将修改后的数据应用至目标数据库。

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值