DMHS管理员手册学习笔记


引言

在这里插入图片描述

  • DMHS 的组成原理框图中包含:源端数据库目标端数据库源端 DMHS 服务以及目标端 DMHS 服务
  • 源端 DMHS 服务主要由装载模块(LOAD)、**日志捕获分析模块(CPT)以及管理服务模块(MGR)**组成
  • 目标端 DMHS 服务则由**执行模块(EXEC)管理服务模块 (MGR)**组成。
  • 在源端,DMHS 的 CPT 模块采用优化的日志扫描算法实现增量日志数据的快速捕获分析,并将分析完成后的日志数据转换为内部的消息格式,然后通过网络将消息发送至目标端 DMHS 服务;
  • 在目标端, DMHS 服务接收到源端的日志消息后,对消息进行处理,通过多线程并行执行的方式将同步数据应用至目标端数据库,实现数据实时同步。

DMHS基础概念

1. 概述

1.1 DMHS系统组成

DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输
模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。
在这里插入图片描述
管理模块(MGR)是 DMHS 同步服务的启动框架,根据配置文件加载并启动相关的功能模块:
1. 捕获模块(CPT)
对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。
不同的源数据库管理系统具有不同的日志格式,但是在日志文件中通常都会记录操作的类型、操作的时间戳、事务 ID、操作数据等信息。DMHS 源端针对每一种支持的关系型数据库系统,均提供有相应的日志捕获分析模块,用以识别和解析不同的关系型数据库系统的日志数据。管理服务(MGR)中提供有通用的调用接口,通过配置的数据库类型,调用相应的日志分析模块。
CPT 日志分析模块通常还需要结合数据字典信息才能正确的解析同步数据,因此在启动日志分析模块时,首先要进行数据字典装载操作,生成同步表的字典目录,保存完字典信息后才能启动日志捕获分析模块。DDL 操作的捕获分析同步有 2 种方式,分别是基于系统事件触发器的捕获分析和基于数据库日志的捕获分析。不同的实现方式其配置要求也不同。
2. 装载模块(LOAD)
DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致。
数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式。直接的数据装载方式基于源数据库数据的直接查询抽取装载;备份文件装载方式则是基于数据库自身的数据备份还原,将源库初始数据备份后在目标库进行还原达到初始数据一致。备份文件装载方式要求源库和目标库为同一类型的数据库系统,目前 DMHS 仅支持 DM 数据库的备份文件装载方式。
初始装载使用 LOAD/COPY 控制台命令,该命令可以在不中断源数据库服务的情况下把源表初始基础数据装载到目的库上,同时配合日志分析模块完成该表后续的增量数据同步。初始装载模块不能跟日志分析模块同时运行,在执行 COPY 命令时,必须首先使用 STOP CPT 命令停止日志捕获分析模块的运行。
3. 传输模块(NET)

  1. NET 消息发送子模块
    经过 CPT 捕获到的日志操作,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息中的列进行映射(改名、剔除和函数计算)。经过处理的消息通过网络(TCP/IP)发送给下一级,或者保存到本地文件。
  2. NET 消息接收子模块
    经上一级 NET 消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。而上一级 NET 消息发送子模块保存消息的本地文件目录,既可以是一般的本地文件目录,也可以是提供 FTP 服务的 FTP 文件目录。当上一级 NET 消息发送子模块将消息保存在一般本地文件目录时,NET 消息接收子模块读取本地文件并发送给 EXEC 模块;当上一级 NET 消息发送子模块将消息保存在 FTP 文件目录时,NET 消息接收子模块可通过 FTP 服务器下载数据,并发送给 EXEC 模块。

除了作为 CPT 模块和 EXEC 模块的传输媒介外,NET 模块还能够单独实现转发和路由功能,这两个功能需要在配置文件中独立配置,通过转发和路由功能实现多对多、一对多、文件中转和 FTP 中转的高级功能,具体配置方式和功能介绍请参阅相关章节。

4. 执行模块(EXEC)
DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL 语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步;如果某个事务在源端回滚,则直接丢弃不执行。
EXEC 模块使用多线程并行执行的方式,对多个提交事务同时进行入库执行,以提高入库执行的效率。由于事务之间的关联关系以及事务提交策略的影响,多个执行线程之间可能存在一定的等待关系,以满足事务的逻辑要求。EXEC 模块还可以通过事务合并、事务分裂等事务重组技术,以及 rowid 映射、批量绑定执行等技术加快同步执行的效率。

1.2 DMHS功能划分

为适应不同的应用场景,DMHS 提供的功能可以细分为捕获器功能、执行器功能、路由器功能、转发器功能。
1. 捕获器
捕获器将源端数据库日志读取解析后发送出去,它必须与源端数据库在同一台机器上
捕获器由 MGR 模块、CPT 模块、NET 发送子模块组成,XML 配置文件中对应元素为 base、cpt、send。NET 发送子模块不能单独存在,必须由 CPT 模块调用;在 XML 配置文件中也是一样的,send 元素为 cpt 元素的子元素。
捕获器中包含日志分析模块 CPT,由于日志分析需要用到数据库中的表信息,所以捕获器在首次启动时,要进行初始化加载需要同步的表的字典信息,把这些信息存放到本地。即使源数据库中断了服务,也不会影响日志分析。因此需要在捕获器中配置源数据库连接相关的信息,包括连接数据库的用户名和口令。
2. 执行器
执行器将接收到的数据入库执行,它可以与目标端数据库处于不同机器。执行器由 MGR模块、EXEC 模块、NET 接收子模块组成,XML 配置文件中对应元素为 base、exec、recv。
NET 接收子模块不能单独存在,必须由 EXEC 模块调用;在 XML 配置文件中也是一样的,recv 元素为 exec 元素的子元素。
执行器中的主要模块 EXEC 模块,主要用来进行数据入库,为了兼容大多数的数据库,它采用了标准的 ODBC 驱动接口和符合 SQL92 标准的 SQL 语句来访问数据库。此处需要配置的参数有数据库连接信息、事务缓存信息以及事务入库的方式等。数据入库往往是DMHS 数据同步的性能瓶颈所在,所以这块参数配置非常的重要,需要结合实际的运行环境,源端应用事务的特点来针对性的配置,实现入库性能的最大化。
3. 路由器
路由器一般配置在第三台机器上,对捕获器中 CPT 模块和执行器中的 EXEC 模块进行映射,从而实现跨网关同步,并且一个路由服务可以实现 N 对 N 的映射。路由器由 MGR 模块、NET 接收子模块、NET 发送子模块组成,XML 配置文件中对应元素为 base、route、recv、send。NET 接收子模块和 NET 发送子模块由 MGR 模块调度,从而实现路由功能;在XML 配置文件中 recv 元素和 send 元素均为 route 元素的子元素。
路由器适用在捕获器和执行器被网关隔断的环境,捕获器中的 CPT 模块和执行器中的EXEC 模块无法通过 NET(捕获器的 NET 发送子模块及执行器的 NET 接收子模块)实现网络直连,需要经过第三台机器中转的情况。
4. 转发器
转发器将接收到的数据通过网络进行转发或是直接落地成本地文件。网络转发可以实现异步的一对多的需求,而落地成本地文件可以实现 FTP 的同步模式或者穿透网闸的需求。
转发器由 MGR 模块、NET 接收子模块、NET 发送子模块组成,XML 配置文件中对应元素为 base、transfer、recv、send。NET 接收子模块和 NET 发送子模块由 MGR 模块调度,从而实现转发功能;在 XML 配置文件中 recv 元素和 send 元素均为 transfer 元素的子元素。
转发器适用在一个捕获器需要对应多个执行器的环境,或者捕获器和执行器之间存在物理隔离网闸,无法通过网络直连需要通过文件中转的情况。
转发和路由的不同在于,路由是 N 对 N 网络链路的映射,它不能对链路中的数据进行修改,而转发功能则可以针对每个下一级配置不同的过滤和映射。

1.3 系统特性

DMHS 同步服务器具有以下技术优势:
✈️高可扩展性:DMHS 的开放式体系结构使其能够适应各种异构数据平台。系统安装部署简单但功能强大,可以根据用户需求采用非常灵活的方式配置出各种拓扑结构,包括一对一同步、一对多广播型同步、多对一聚合型同步、多对多同步以及级联同步等多种数据同步形式,满足用户的各种复杂数据同步需求。
✈️高可用性:DMHS 采用基于日志的结构化数据同步技术,实时数据同步不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响。DMHS 提供业务连续性支持,备机数据库系统始终出于活动状态。在非计划性停机导致主机业务系统无法工作时,可
在 DMHS 的备机数据库系统上及时接管业务,实现业务系统快速切换和恢复,保持业务连续并使数据损失最小化。
✈️实时同步:DMHS 采用并行处理体系,能够实时读取主机源数据库日志,以较低的资源占用实现大批量的数据实时同步。在DMHS 同步源,DMHS 采用优化的日志扫描算法实现目标数据的快速抽取。在 DMHS 目标端,DMHS 使用数据库本地 ODBC 接口访问备
机数据库系统,同时可以通过事务重组、分批加载等技术加快数据装载的速度和效率,降低备机数据库系统的资源占用。传输过程中,DMHS 直接通过 TCP/IP 进行网络传输,无需依赖于数据库自身的传递方式,通过对传输对数据进行筛选和压缩,还可以进一步降低带宽
需求。
✈️高可靠性:DMHS 的数据同步以源数据库的事务为单位,严格按照主机业务系统事务顺序实施数据同步,保障备机数据库与主机数据库的事务级完整性和一致性,确保备机数据库符合主机业务系统事务逻辑。通过这种事务级粒度的数据一致性维护,使得备机数据库系统分担主机数据库系统上的业务负载成为可能。数据在传输过程中可能因为网络故障而导致传输中止。为保障数据传输的无丢失,DMHS 使用检查点机制实现断点续传。断点包括两个部分,即 DMHS 前置的变化数据捕捉模块数据抽取位置检查点和 DMHS 主程序的数据装载模块的已装载位置检查点。DMHS 的前置模块与主程序模块采取完备的消息应答机制来保障数据传输的可靠性和数据完整性。前置模块只有在得到确认消息后才认为数据传输完成,否则将自动重新传输数据。
✈️备机可读写:与传统仅作为后备而无法对外提供数据服务的备机系统不同,DMHS 的备机数据库系统是一套独立的可读写数据库系统。通过高可靠的数据传输,DMHS 备机数据库系统中的数据可以在业务处理逻辑上与主机系统完全保持一致。应用系统通过简单配
置,就可以使用 DMHS 的备机系统分担主机业务系统上的负载,提高业务系统效率。同时,根据实际业务需要,还通过 DMHS 的备机系统还可以实现生产型业务与分析型业务的完全隔离双业务中心,提高应用系统整体性能。
✈️同步内容可定制:DMHS 支持同步数据可筛选、数据过滤和简单的数据转换,实现满足业务需求的按需同步,有效的降低网络通信代价和存储成本。DMHS 数据筛选通过用户在需要同步的表上定义过滤和转换规则来实现。未来 DMHS 还将和 DMETL 结合,实现更为复杂的数据清洗。DMHS 还支持传输数据压缩和加密,在进一步降低网络传输代价的同时,提高传输安全性,防止数据库数据在传输过程中被非法窃取。
✈️快捷部署:DMHS 采用轻量级框架设计,能够方便项目实施人员快速部署并极大的减少系统管理员工作压力和负担。同时 DMHS 支持初次数据装载全同步功能,能够在不中断业务的情况下,将主机数据库中的当前数据平滑的装载到备机数据库中。
✈️跨平台:DMHS 面对日趋复杂的计算机环境具有极好的适应性,能够在目前流行的各种软硬件平台和数据库环境下传输数据,在同一解决方案架构下,实现企业不同平台上的多个信息系统的统一同步的支持。目前主机源数据库支持 DM6、DM7、Oracle9i、Oracle10g、Oracle11g、DB2、MySQL、PostgreSQL、 SQLServer。备机目的数据库支持可通过 ODBC 接口连接的各种主流关系数据库管理系统。

2. 管理模块(MGR)

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

2.1 MGR 原理分析

MGR 模块可以解析配置参数,根据配置参数启动 DMHS 的捕获器功能、执行器功能、转发器功能或路由功能。当 MGR 启动捕获器功能时,MGR 会调度 CPT 模块和 NET 模块(发送子模块);当启动执行器功能时,会调度 NET 模块(接收子模块)和 EXEC 模块;当启动转发器或路由器功能时,会调度 NET 模块(接收子模块和发送子模块)。
MGR 模块主要组成部分如下图(蓝色虚线为可选):
在这里插入图片描述
❤️配置参数解析:负责解析用户的 dmhs.hs 配置文件。默认读取安装程序目录中 bin 文件夹下的 dmhs.hs 文件,也可由用户指定。配置参数并不是一次性读取解析,当启动相应模块时才根据配置文件路径读取并解析。所以,当 DMHS 服务启动时,首先启动 MGR 管理模块,此时只对 MGR 对应配置 base 元素中的参数进行读取解析,如果修改 base 元素中子元素或元素值,则必须重新启动 DMHS 服务才能使参数生效。
另外,配置参数解析模块还负责修改配置。用户可通过客户端管理工具修改配置,修改后的配置参数会被写入安装程序目录中 bin 文件夹下的 dmhs.hs 文件中。所以,当用户需要通过 web 客户端管理工具修改配置参数时,建议不要使用自定义的配置文件路径。修改后的捕获器、执行器、路由器或转发器,必须重启对应模块,新的配置才能生效。
❤️统计信息入库:对采样的统计信息进行入库处理。
❤️内置 FTP 服务器:负责将日志解析的数据发送到本机内置 FTP 服务器。在进行一对多的数据实时同步环境中,可以通过启用 FTP 被动传输功能,从而避免多条数据链路对数据发送效率的影响。
❤️同步服务主备:负责源端 DMHS 服务的故障切换。此功能仅针对捕获器。
❤️服务器控制台:服务器命令行人机交互界面。
❤️消息接收/处理反馈:负责接收服务器控制台/客户端控制台/WEB 管理工具控制台命令,并返回执行结果。
❤️任务调度:负责调度 CPT 模块、EXEC 模块、NET 模块,用以提供捕获器、执行器、转发器或路由器功能。

3. 装载模块(LOAD)

DMHS 在进行增量数据同步之前,需完成数据及表字典的初始装载。初始装载将源端数据库已有数据同步到目的数据库,同时,初始装载将有用的表字典,保存到本地磁盘。
数据初始装载有两种方式:数据装载方式备份装载方式。备份文件装载方式是对数据装载方式的补充,这种装载方式只适用于DM6 数据库。
LOAD/COPY 是初始装载功能模块的操作命令,使用该命令可以在不中断源数据库服务的情况下把源表装载到目的库上,配合日志分析模块完成该表的数据同步。初始装载模块不能跟日志分析模块同时运行,也就是在执行 COPY 命令时,必须停止日志同步模块的运行。COPY 命令运行前,源库需要将数据库环境需求准备完毕,例如打开数据库归档等。

3.1 离线字典

DMHS 是通过解析交易日志来实现获取数据库数据的增量变化;但在交易日志中,并不会记录对象的定义,而是使用一个标识(对象 id)来代表操作对象。CPT 模块在分析交易日志的过程中,需要通过对象 id 来获取对象定义。如果通过连接数据库执行 SQL 语句来获取对象定义,会存在以下问题:

  1. 可能无法获取到当前时刻该对象的定义。当 DMHS 同步重启时,源端 CPT 模块捕获到数据修改的表,可能与数据库系统表中记录的对象定义有差异,此时使用数据库,无法正确获取当前时刻对象的定义。
  2. 实时查询源端数据库,对数据库性能有影响。
  3. 可能存在源端数据库异常的问题导致无法正常获取 SQL 语句执行结果。为解决以上问题,DMHS 引入了离线字典。
3.1.1 功能简介

离线字典主要是为 CPT 模块提供准确的表定义信息。离线字典默认存在在 DMHS 安装目录 DICT 目录,可修改配置文件指定离线字典的存放路径。
离线字典文件是以表为单位进行保存,文件名为 cptvid_表 id.dct。离线字典文件中包含表名、表的所有列信息以及表的版本信息等。

3.1.2 实现原理
3.1.2.1 离线字典的生成

离线字典文件有两种生成途径:

  1. 通过装载命令 COPY 生成。在装载表的时候,如果添加掩码 DICT,则所有装载的表都会在源端生成离线字典文件,此时离线字典文件表信息版本号为装载表时,数据库的当前 LSN。
  2. DMHS 在同步过程中产生。当在同步过程中,如果源端数据库存在创建表的操作,同时该表为需要同步的表,CPT 模块会将该表的信息生成离线字典,离线字典的版本为创建表操作的数据库 LSN。
3.1.2.2 离线字典信息的修改及删除

交易日志中每个记录表的 DDL 操作,都会引起离线字典信息的修改。当解析到一个表 DDL 操作时,CPT 模块会对该表生成一个新版本的字典,新的表字典版本信息为 DDL 操作的数据库 LSN,同时 CPT 模块也会将内存中该表的字典信息修改为新的字典信息。新的表字典信息会追加到该表离线字典的末尾,新的表字典信息长度为 512 的整数倍。
当源端数据库中,对表进行删除时,CPT 模块将字典文件标记为表已删除,同时将表字典的 LSN 设置为当前 LSN。当源端日志清理线程清理归档文件时,会根据获取到得最小LSN,判断表字典是否可以删除。表字典 LSN 小于最小 LSN 的表字典,都将被删除。

3.1.2.3 离线字典的使用

CPT 模块在分析表操作时,必须使用正确的表字典信息,表字典过新或者过旧,都可能引起分析错误。CPT 模块在启动时,会读取所有字典文件,然后根据最小 LSN,加载正确版本的表字典。当源端数据库创建表时,CPT 模块会将新表的表信息存放到离线字典中,表信息为当前 DDL 操作时数据库 LSN。
离线字典文件是 CPT 模块进行日志分析的基础,离线字典文件名及内容格式不能人为进行修改,否则会导致字典信息不正确,数据同步错误或数据丢失。

3.2 字典装载

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

COPY <VID> "<过滤条件>" DICT

COPY:字典/数据装载命令。
VID:日志捕获模块的虚拟编号,该编号从 0 开始,与 DMHS 配置文件中日志捕获相同。
过滤条件:装载表对像的过滤条件,其中 SCH.NAME 对应源库的模式别名,TAB.NAME 对应源库中的表别名,必须像写查询语句 WHERE 条件一样的拼写出要装载表对像的过滤表达式。
字典装载使用 DICT 掩码,该掩码可与其他数据装载掩码同时使用,在这种情况下,DMHS 会首先进行字典装载,然后进行数据装载。进行字典装载时,表字典的 LSN 为获取表信息时数据库的 LSN。
当其他数据装载选项中包含 INSERT 时,所有装载的表字典都会被保存。字典装载除了会装载过滤条件中的表字典外,还会装载 DMHS 使用到的数据库系统表字典。所有数据库系统表字典 LSN 均为 0,并且每个只有一个版本信息。

3.3 数据装载

所有 DMHS 源端支持的数据库类型,均可使用数据装载方式进行执行端数据的初始化。数据装载是通过同步表某个时刻数据的方式实现的,在查询表数据之前,需要对表上 S 锁。

3.3.1 数据装载命令格式

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

COPY <VID> "<过滤条件>" <装载选项> 

装载选项:包括 CREATE、TRUNCATE、DROP、INSERT 等掩码
命令其它参数设置,请参照字典装载。
数据装载命令完成之后,会将所有满足过滤条件的表数据都发送到执行端,执行端将数据入库。当某个表数据入库完成之后,会在表 DMHS_TABLE_SEQID 中插入一行同步表的数据,DMHS_TABLE_SEQID 表中的数据影响装载选项 CONTINUE 的操作结果。
当装载过程中有操作失败时,会将执行出错的表信息写入 DMHS_ERROR_TABLE,当装载完成之后,可根据 DMHS_ERROR_TABLE 中的数据确认表数据装载是否成功。
装载成功的表,可保证目的数据库表的数据,与源端数据库对应表的数据在某个时刻完全一致,当进行增量同步时,源端数据库该时刻之前的操作都不会同步到目的数据库。
当 对 整 库 装 载 数 据 时 , 应 将 执 行 端 DMHS_TABLE_SEQID 、DMHS_TRXID_TABLE 及 DMHS_ERROR_TABLE 中,关于该站点的信息删掉。

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

3.4 备份装载

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

3.4.1备份装载命令格式

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

COPY <VID> "<过滤条件>" BACKUP|其他装载选项

其他装载选项包括:FILE、NEXT、DICT。
备份装载是将源端数据库备份文件,发送到执行端,执行端利用 SQL 语句,利用备份文件还原目的端数据库。还原之后,执行端通过备份文件中的信息,决定哪些事务需要入库。

4. 捕获模块(CPT)

CPT 模块部署在源端数据库,其作用是对源端数据库的增量数据进行抽取。CPT 模块通过解析源端数据库的交易日志,获取数据的增量变化,并将增量变化封装为 DMHS 消息。CPT 模块在分析交易日志过程中,无需操作数据库,对源端数据库性能几乎没有影响。
CPT 模块是捕获器的主要组成部分,包含 NET 模块发送子模块,并由 MGR 模块调用。

4.1 CPT原理分析

CPT 模块在启动时,会利用 NET 模块,向对端发送获取起始 LSN 的命令。CPT 模块找到起始 LSN 对应的交易日志位置,从该位置开始读取交易日志进行分析。起始 LSN 表示该 LSN 之前的所有事务都已经同步到目标端。随着 DMHS 同步的进行,起始 LSN 会向后推移。
CPT 模块在抽取增量数据时,并不能根据交易日志,还原源端数据库的 SQL 操作,但可以实现源端数据库 SQL 操作的同等操作。对于DML 操作,CPT 模块以数据行为单位,对交易日志进行解析;对于 DDL,CPT 模块以单个 DDL 动作为单位,对交易日志进行解析。
离线字典是 CPT 模块进行交易日志分析的基础,也是实现离线分析的基础,当一个表的离线字典不存在时,源数据库中该表的所有操作都会被过滤掉。
CPT 模块主要组成部分如下图:
在这里插入图片描述
🌱日志读取线程:负责交易日志数据的读取。该线程从交易日志中读取文件数据,按照数据库中定义的逻辑单元,对文件数据进行分割,并将分割后的逻辑单元添加到日志分析链表中。当当前交易日志读取完毕之后,该线程会自动获取下一个交易日志进行数据读取,如果不存在下一个交易日志,则需等待交易日志。
🌱日志分析线程:负责对日志逻辑单元进行解析。该线程从日志分析链表中获取第一个逻辑单元,根据不同的逻辑命令,解析逻辑单元。当逻辑单元中包含数据操作时,日志分析线程解析逻辑单元,解析完成之后会生成 DMHS 消息,并将 DMHS 消息添加到发送连表中。
🌱日志发送线程:负责与 NET 模块进行交互。该线程从发送链表中获取 DMHS 消息,调用 NET 模块功能,将将 DMHS 消息根据过滤规则发送到目标端或丢弃。
🌱日志文件处理线程:负责交易日志信息的处理及物理文件的处理。CPT 模块在运行过程中,根据最小 LSN 对交易日志进行处理,当交易日志开始的 LSN 小于最小 LSN 时,表示该交易日志已经分析完成,交易日志的信息可以进行处理。当启用交易日志物理文件的清理功能时,该线程可根据最小 LSN 对源端数据库的交易日志进行物理删除。

5. 传输模块(NET)

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

  1. 日志捕获 CPT 模块需要通过 NET 模块来发送数据。
  2. EXEC 模块则需要通过 NET 模块接收数据。
  3. ROUTE 通过 NET 模块进行消息转发。
  4. TRANSFER 通过 NET 模块进行消息转发。
    同步链路中多对一、一对多和多对多的数据传输都是通过 NET 模块来实现的。RECV 子模块与 SEND 子模块在 DMHS 配置文件中的位置如下所示:
    在这里插入图片描述

5.1 NET 原理分析

NET 模块是各个功能模块之间连接通信、信息交换与传输的工具,包括以下功能:

  1. 表操作的过滤:同步过程中,NET 模块会根据配置,对同步的数据进行判断,如果不满足黑名单条件且满足白名单条件,则将消息发送到目标端,否则,直接丢弃。
  2. 列值转换及过滤:同步过程中,当需要对表数据进行转换,NET 模块会根据原始数据,计算转换后的数据,并对消息数据重新填充;当需要对表中特定数据进行过滤/筛选时,NET 模块会对原始数据进行判断,是否需要进行传输。
  3. 消息的本地存储:NET 模块可将接收到的 DMHS 消息进行本地存储,本功能在网络环境不稳定的环境中,可最大限度的保证增量数据不丢失。
  4. 消息的本地读取:NET 模块可从本地存储中读取 DMHS 消息,发送到目标端。
  5. 消息的 FTP 远程读取:NET 模块可从远程 FTP 服务器中读取 DMHS 消息,发送到目标端。
  6. 消息的发送及接收:DMHS 各站点之间数据的传递都是使用 NET 模块完成的。

5.2 NET 发送子模块

在这里插入图片描述

发送子模块可供 CPT、TRANSFER 或 ROUTE 使用,使用方式如下:

  1. CPT 捕获器将日志读取分析后获取的数据,通过调用发送子模块进行过滤操作并发送到下一级 DMHS NET 接收子模块或保存到本地文件。
  2. TRANSFER 转发包含 NET 接收子模块和 NET 发送子模块,NET 接收子模块到数据后,再由 NET 发送子模块进行过滤操作并发送到下一级 DMHS NET 接收子模块或保存到本地文件。
  3. ROUTE 路由包含 NET 接收子模块和 NET 发送子模块,NET 接收子模块收到数据后直接将缓存数据发送到下一级 DMHS NET 接收子模块。在路由器中,NET 接收子模块不对消息拆包,不能使用过滤及消息本地存储功能,接收到的数据仅存在于内存中并不写入本地存储。

5.3 NET 接收子模块

接收子模块可对网络、本地磁盘、FTP 服务器获取数据,按照参数配置,将接收到得数据保存到本地文件或将数据提供给替他模块使用,例如执行模块、路由器模块等。
在这里插入图片描述

6. 执行模块(EXEC)

EXEC 模块主要的功能是对 CPT 捕获的增量数据进行入库,它目前采用符合 SQL92 标准的 SQL 语句,通过 ODBC 接口和目标端数据库交互(在初始化装载时如果选择快装功能,它需要加载快装模块,快装模块使用了 OCI 接口),所以它可以部署在能够和目标端数据库连通的任意一个节点上。在整个同步链路中,EXEC 模块对整个同步的性能起着决定性的作用,需要根据相应的同步场景配置好 EXEC 模块参数,方可达到最优的同步性能。

6.1 EXEC 原理分析

DMHS 在数据同步时,源端不同数据库的交易日志经过 CPT 的解析,封装成统一的数据格式,经过 NET 模块一级级的投递,最后投递到 EXEC 模块进行入库处理,当 EXEC 模块把接收到的事务入库以后,该事务的同步流程才算正式完成。EXEC 模块通过 NET 的 RECV 模块接收到源端的数据以后,需要对接收到的数据提取进行事务归类,归类过程中还会涉及到大事务的缓存,部分回滚的处理,ORP 操作的转换,组织大对像数据等复杂的处理。在明确事务收到提交操作以后,再把提交的事务交由执行线程进行入库处理。
在这里插入图片描述
EXEC 模块在事务数据入库时,由于采用的是 ODBC 标准的接口操作数据库,如果目标表上存在触发器,那么入库操作同样会触发这些触发器,如果触发器中会涉及到数据或是其它表的修改,则会造成源端和目标端数据的不一致。在搭建 DMHS 时,应该事先禁用目标库中需要同步表上的触发器,针对表上约束也是一样的道理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux 应用管理是 Linux 系统管理的一个重要方面,它涉及到如何安装、更新、卸载和管理 Linux 应用程序。下面是一些关于 Linux 应用管理的学习笔记: 1. 安装应用程序 在 Linux 中,可以使用包管理器来安装应用程序。常见的包管理器有 apt、yum、dnf 等。例如,在 Ubuntu 系统上,可以使用以下命令安装应用程序: ``` sudo apt-get install package-name ``` 在 CentOS 系统上,可以使用以下命令安装应用程序: ``` sudo yum install package-name ``` 2. 更新应用程序 在 Linux 中,更新应用程序通常也通过包管理器进行。例如,在 Ubuntu 系统上,可以使用以下命令更新应用程序: ``` sudo apt-get update sudo apt-get upgrade ``` 在 CentOS 系统上,可以使用以下命令更新应用程序: ``` sudo yum update ``` 3. 卸载应用程序 在 Linux 中,可以使用包管理器来卸载应用程序。例如,在 Ubuntu 系统上,可以使用以下命令卸载应用程序: ``` sudo apt-get remove package-name ``` 在 CentOS 系统上,可以使用以下命令卸载应用程序: ``` sudo yum remove package-name ``` 4. 管理应用程序 在 Linux 中,可以使用 Systemd 服务来管理应用程序。Systemd 是一个系统和服务管理器,它可以启动、停止、重启和管理系统服务。例如,在 Ubuntu 系统上,可以使用以下命令启动、停止和重启应用程序: ``` sudo systemctl start service-name sudo systemctl stop service-name sudo systemctl restart service-name ``` 在 CentOS 系统上,可以使用以下命令启动、停止和重启应用程序: ``` sudo systemctl start service-name sudo systemctl stop service-name sudo systemctl restart service-name ``` 以上是关于 Linux 应用管理的基础知识,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值