导读
作者:杨漆
16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。
Best Practice for Data migration from Oracleto Tidb
为何要选择TiDB ?
随着业务的高速发展、数据的爆发式增长,很多使用关系型数据库的公司为保障业务的有效进行不得不面临一轮数据库的垂直拆分和水平拆分。但拆分后对代码的侵入性较大,后续的不断扩容让 DBA 的管理成本上升(时间成本、运维成本、管理复杂度等等)。所以急需一种既能支持关系型数据库 RDBMS 和非关系型数据库 NoSQL 分布式的存储计算引擎。
市场上有没有这种兼二者之长的Database ?
有!
TiDB 分布式数据库结合了传统的 RDBMS 和NoSQL 的最佳特性。首先,高度兼容 MySQL 协议,大多数情况代码可以直接迁移到 TiDB 分布式数据库,已分库分表的实例可以在 TiDB 中进行聚合;同时,TiDB 分布式数据库支持水平弹性扩展,通过简单地增加新节点即可实现 TiDB 分布式数据库的水平扩展,按需扩展计算节点或存储节点,轻松应对高并发、海量数据场景。
下面介绍怎样将Oracle中的数据同步到 TiDB 分布式数据库:
OGG 是一个综合软件包,用于在异构环境中进行实时数据集成和复制。高可用性解决方案、实时数据集成、事务更改数据捕获、数据复制、转换、操作和分析企业间的系统验证。
三个步骤:
- DDL的转换(使用Navicat或其它工具),注意字段类型和一些不兼容的转换
- 全量数据迁移(使用ogg Initial Load)
- 增量数据迁移(使用ogg)
增量同步需要在初始化同步之前,先开启日志抽取。由于异构平台,无法基于统一时间点完成数据初始导入操作,所以在完成初始化导入操作之后需要完整应用开始 initial load 同步之后的所有 log,此时会存在重复执行的问题,OGG 中通过 handlecolisions参数处理冲突的场景,保证最终数据的一致性(根据主键或唯一键进行重复的操作可以保证最终数据一致,在缺少主键的场景可能会导致数据重复)。
源端 Oracle 要求
• 开启归档模式
• 开启Force logging
• 设置ENABLE_GOLDENGATE_REPLICATION 参数为 true (11.2.0.4)
• 开启最小补全日志(根据同步数据范围选择)
o 表级别
o Schema级别
o 数据库级
• 用户权限
o DBA角色
目标端TiDB分布式数据库要求
• set tidb_constraint_check_in_place = 1;
该参数将TiDB分布式数据库中乐观锁模式下的主键冲突检查由 commit 时检查提升为 insert 时检查,在遇到主键冲突时可配置为忽略冲突,