背景描述
业务的发展,以及数据的爆发式增长,公司会面临一轮数据库的垂直拆分和水平拆分。拆分后对代码的
侵入性较大,后续的不断扩容让 DBA 的管理成本上升。所以急需既支持关系型数据库 RDBMS 和非关系
型数据库 NoSQL 分布式的存储计算引擎。
TiDB 分布式数据库结合了传统的 RDBMS 和 NoSQL 的最佳特性。首先,高度兼容 MySQL 协议,大多
数情况代码可以直接迁移到 TiDB 分布式数据库,已经分库分表的实例可以在 TiDB 中进行聚合;同时,
TiDB 分布式数据库支持水平弹性扩展,通过简单地增加新节点即可实现 TiDB 分布式数据库的水平扩
展,按需扩展计算节点或存储节点,轻松应对高并发、海量数据场景。
所以基于 TiDB 分布式数据库的上述特性,本文将介绍通过 OGG 将 Oracle 的数据同步到 TiDB 分布式
数据库的相关原理及操作步骤。
5.2.1 环境说明
1. 软件版本
Oracle GoldenGate 12.3.0.1.4 for Oracle on Linux x86-64
Oracle GoldenGate 12.3.0.1.5 for MySQL-compatible DBs on Linux x86-64
本文档以 Oracle 11G 数据库为例,对 Oracle 数据库通过 OGG 同步至 TiDB 分布式数据库中进行说
明。
Oracle 端字符集为 ZHS16GBK。
2. 同步过程说明
2.1. 表结构转换
由于 Oracle 中表数据类型与 TiDB 分布式数据库中数据类型不一致,需要预先进行表结构的转换(可以
使用 Navicat 工具)。
2.2. 初始化同步
初始化数据通过 OGG initial load 进程将 Oracle 数据导入到 TiDB 分布式数据库中,如此时 Oracle 数
据库中仍然有写入操作,则 initial load 开始时间之后的数据变化无法同步,此时需要进行增量的数据同
步,且在同步多张表时,每个表同步的时间并不一致。如采用停机同步(同步期间 Oracle 中表数据不再
变化),仅需要进行初始化同步操作。
2.3. 增量数据同步
在初始化同步的基础上进行后续变化的数据同步,需要在初始化同步之前,先开启日志抽取。由于异构
平台,无法基于统一时间点完成数据初始导入操作,所以在完成初始化导入操作之后需要完整应用开始
initial load 同步之后的所有 log,此时会存在重复执行的问题,OGG 中通过 handlecolisions 参数处理
冲突的场景,保证最终数据的一致性(根据主键或唯一键进行重复的操作可以保证最终数据一致,在缺
少主键的场景可能会导致数据重复)。
3. 源端 Oracle 要求
归档模式
Force logging
ENABLE_GOLDENGATE_REPLICATION 参数为 true (11.2.0.4)
评论