1 需求概述

将企业多个业务系统产生的交易数据流实时同步到数据仓库或大数据平台,通过对交易数据的联机实时分析,快速制定或调整商业计划,提升企业的核心竞争力。

需求关键点:同步过程不可影响或中断业务系统正常运行、同步延时3秒以内。

2 技术原理

采用灵蜂数据集成软件BeeDI在异构库间进行实时数据同步,通过ETL全量同步历史数据,通过日志解析方式实时同步增量数据,BeeDI提供Oracle、SQL Server、MySQL、DB2、PostgreSQL、达梦数据库日志解析功能。

根据生产环境日志空间的大小,可分批增量或一次性同步历史数据。

在日志空间受限的情况下,如果将所有历史数据一次性同步,全量过程产生的日志超出预留空间会被删除,造成实时日志解析任务数据缺失,需要分批增量同步历史数据,基本操作如下:

a) 全量同步部分表。

b) 在实时日志解析任务中添加已全量同步完成的表并启动任务,当源库和目标库两端对应表数据一致时,停止日志解析任务。

c) 重复上面a)和b)步骤,直到所有表都加入实时日志解析任务。

如果日志空间充足,则可一次性同步所有历史数据,然后启用实时日志解析任务。

3 数据库环境配置

3.1 启用日志捕获

在源库创建同步用户,该用户可以读取所有对象、系统字典及数据库日志权限。

在源库开启数据库日志功能,如Orcale开启归档日志、SQL Server开启完整日志、MySQL开启BinLog。

3.2 存储空间

根据源库历史数据量及日增数据量,评估目标库需要的空间大小,在目标库预留足够的表空间。

4 BeeDI同步操作

4.1 配置全量同步任务

为优化数据抽取性能,建议在抽取组件的【选项】对话框中设置【异步】抽取模式。

异构数据库同步java 异构数据库集成_历史数据

为优化数据加载性能,建议在装载组件的【选项】对话框中选择【批量】装载模式。

异构数据库同步java 异构数据库集成_历史数据_02

全量同步任务配置完成如下:

异构数据库同步java 异构数据库集成_mysql_03

按照以上方式,创建多个ETL任务,其中每个ETL任务对应一张同步表。

4.2 配置实时日志解析任务

实时解析任务同一数据源对应一个任务,在其中指定所有要同步的表。

在各个抽取组件的【选项】对话框中,设置增量抽取,指定日志模式。

异构数据库同步java 异构数据库集成_历史数据_04

完成后的ETL任务如下:

异构数据库同步java 异构数据库集成_数据库_05

4.3 执行全量同步任务

可以同时启动多个全量同步任务,只要数据库服务器资源及BeeDI所在机器资源充足。

4.4 执行实时日志解析任务

当所有全量同步任务运行结束后,编辑实时日志解析任务,在其中添加所有全量同步完成的表;将最先运行的全量同步任务的启动时间指定为日志解析点,日志解析点只需在任务初次执行时设置一次,以后任务运行将自动管理解析点。

异构数据库同步java 异构数据库集成_历史数据_06

指定实时任务按秒定时运行,运行周期1秒。

实时任务运行后,在日志窗口输出数据库日志解析信息,包含每分钟读取的日志记录,最近解析日志时间点。

异构数据库同步java 异构数据库集成_mysql_07

4.5 添加更多同步表

当实时任务对应的作业状态频繁出现定时图标时,表明任务进入实时状态,此时源表和目标表数据一致,停止实时任务,配置运行其它表的全量同步任务(参考4.1和4.3)。当全量任务结束后,编辑实时任务,增加已全量同步完成的其他表,启动实时任务(参考4.2和4.4)。

异构数据库同步java 异构数据库集成_历史数据_08

5 校验同步数据一致性

依次在源库和目标库执行 select count(*) from [表] 比较表记录数是否相等。

依次在源库和目标库执行 select sum([数值列]) from [表] 比较指定字段算术和是否相等。