Oracle到DM实时数据同步实施方案

目录

[1 项目概述](#1 项目概述)

[2 需求分析](#2 需求分析)

[3 实施操作](#3 实施操作)

[3.1 历史数据全量同步](#3.1 历史数据全量同步)

[3.2 增量数据实时同步](#3.2 增量数据实时同步)

[4 问题总结](#4 问题总结)

[4.1 字符型非空约束](#4.1 字符型非空约束)

[4.2 字符型唯一索引尾部空格](#4.2 字符型唯一索引尾部空格)


1 项目概述

将Oracle 11g RAC生产环境数据同步到DM8分析环境,Oracle数据库大小1.5T,日增归档100G,DM数据库为新建库。

初始同步表数70多张,其中10张表记录数过千万,最大表记录数上亿,后续根据需要增加其它同步表。

数据同步正常延时不超过5秒。

2 需求分析

数据同步涉及已有历史数据一次性同步和新增数据实时同步两项内容。

历史数据同步通过BeeDI的ETL功能实现,BeeDI从源表读取数据,然后将读取的数据批量写入目标表。

增量数据同步采用BeeDI日志捕获功能实现,BeeDI通过SCN获取日志增量记录,还原日志记录对应的DML操作数据,然后依据DML类型(ins、del、upd)对目标库执行相应数据操作。

DM库中对应的目标表,无需手工创建,可通过BeeDI的模式映射功能在同步数据时自动创建。

同步表大多包含时间戳信息,之所以弃用时间戳同步方式,原因在于当写入记录的时间序列与对应记录的提交时间序列不一致时,采用时间戳进行实时同步会出现丢失数据的情况。

3 实施操作

3.1 历史数据全量同步

针对需要同步的每一张表,单独配置全量同步任务,操作如下:

1) 新建ETL任务,任务名称对应表名。

2)配置Oracle和DM数据库连接。

3)从Oracle接口窗口拖拽表节点到DM接口。

4)调整装载组件属性,勾选是否清空复选框,装载模式选择批量

5)启动任务,观察任务运行状况,如果任务运行出错,需要分析错误原因,解决错误后重新启动任务,直到任务成功结束。

重复以上操作,直到所有需要同步的表对应的同步任务配置完成。

记录以上最先运行任务的开始时间,该时间将作为实时同步任务的日志捕获起点。

3.2 增量数据实时同步

对于需要同步的所有表,集中配置一个实时同步任务,操作如下:

1)新建ETL任务,指定实时任务名称。

2)配置Oracle和DM数据库连接。

3)从Oracle窗口拖拽将要同步的表节点到模板空白处创建对应源表的抽取组件。

4)在DM窗口通过 装载 快捷命令创建对应目标表的装载组件。

5)建立抽取组件到装载组件的数据流映射。

6)重复以上3)、4)、 5)步骤,直到所有需要同步的表对应的抽取组件和装载组件完成映射。

7)使用快捷命令自动排列格式化组件显示。

8)从上到下依次调整各个抽取组件的增量抽取属性,勾选增量抽取复选框,在弹出的增量抽取设置对话框中选择日志增量模式,在逻辑主键窗口通过快捷命令主键唯一索引设置增量同步逻辑主键。

9)所有抽取组件启用日志增量同步后,任意调整某个抽取组件的增量抽取属性,将解析点时间设置为最先运行全量同步任务的开始时间,确定后在提示框是否选择更新多表捕获关联抽取组件属性?出现时选择

10)设置任务定时自动启动,观察任务运行状况,如果任务运行出错,需要分析错误原因,解决错误后重新启动任务,直到任务成功结束。

4 问题总结

4.1 字符型非空约束

在Oracle中,非空列允许存入长度为0的字符串(空串),而在DM中长度为0的字符串不允许写入非空列,由此导致部分非空列包含空串的数据无法同步写入DM库。

在BeeDI中调整对应表的数据流映射,通过decode函数判定对应列输入数据是否为空串,是则输出一个预定义的默认值,否则原样输出数据。

4.2 字符型唯一索引尾部空格

在Oracle中进行数据唯一性效验时,将对字符型唯一索引字段值的全部内容进行查重,而在DM中将去除字符型唯一索引字段值的尾部空格进行查重,由此导致同样的数据在Oracle中可以写入,而在DM中由于唯一索引冲突无法写入。

在BeeDI中调整对应表的数据流映射,通过自定义函数替换对应列尾部空格为其它字符。

相关推荐
DBA_G4 分钟前
GBase 8s数据库大对象存储详解
数据库
sbjdhjd17 分钟前
SQL 注入零基础详解:原理、手工注入流程与 Sqli-Labs 靶场实战1~5关和第9关思路
数据库·sql·计算机网络·web安全·网络安全·网络攻击模型·安全架构
Tencent_TCB2 小时前
腾讯云 CloudBase 登上 WAIC:我们为 Agent 重新设计了云的生产线
网络·数据库·腾讯云
数智化管理手记2 小时前
预算控制手工核对效率低?预算控制数字化落地实操如何做?
大数据·网络·数据库·人工智能·数据挖掘
MXsoft6182 小时前
成熟的自动化运维平台是什么样的?
运维·数据库·自动化
吴声子夜歌2 小时前
MongoDB 4.x——合理使用索引(二)
数据库·mongodb
慾玄2 小时前
sql注入靶场1-5,9关
数据库·sql
记录者t2 小时前
redis常见问题:大key
数据库·redis
最后的最后、7963 小时前
SQLi-Labs 六关 SQL 注入过关笔记
数据库·笔记·sql