oracle异构迁移mysql方案实施(含原理)——已迁移成功

从迁移方案的落地、迁移前准备、N次迁移演练、回归测试、性能调优整整用了四个月左右的时间(当然在此期间还包括其他项目及日常操作耗费工时)。正式迁移到迁移成功、以及上线开服后性能稳定这些操作已经过去了一个多月时间。由于异构迁移在业界是一个较为困难繁琐的问题,所以经过这么久的沉淀,今天给大家复盘并分享一下整个迁移流程,从前期方案、到最后迁移成功的整个流程,希望给对 ORACLE TO MYSQL 异构迁移流程不清晰的同学,一点思路!


 

目录

一、迁移原由

二、迁移目标

三、迁移方案落地

1.协同高层确定项目目标

2.制定迁移计划

四、迁移工具选型(含功能实现原理)

(1)SQL LOAD

(2)OGG

(3)KETTLE

(4)DATAX

(5)ADAM STUDIO

(6)DTS

五、对象兼容性改写

1.oracle与mysql数据类型转换详情

2.大小写敏感参数

3.数据库对象不兼容改写方案

(1)view

(2)物化视图

(3)Trigger、存储过程、package

(4)分页语句

(5)JOIN

(6)group by语句

(7)bitmap位图索引

(8)分区表(Partitioned table)

(9)角色

(10)表情和特殊字符

六、全量数据校验方案

1.全量数据验证逻辑流图

2.全量数据验证脚本逻辑

3.数据验证注意事项

七、压力测试

八、迁移演练

九、正式迁移

 重复数据处理方案

1).重复数据出现原因:

2).解决方案

十、迁移后性能调优

1.上线后持续关注目标端数据库性能

2.参数调优

innodb_flush_log_at_trx_commit

sync_binlog

max_allowed_packet

innodb_log_file_size

innodb_log_buffer_size

innodb_buffer_pool_size

innodb_buffer_pool_instances

 


 

一、迁移原由

 “去O”,是近些年来一直很火的一个话题。但2019年,也许有着更加特殊的意义。随着国家监管要求、外部环境变化、国产数据库兴起等多种因素,相信今年会是“去O”井喷发展的一年。去O更详细的说是去IOE。

“去IOE”:是阿里巴巴造出的概念。其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机、Oracle数据库、EMC存储设备,代之以自己在开源软件基础上开发的系统。(如公有云厂商产品RDS、CDB等)

二、迁移目标

  • 迁移前后结构一致
  • 迁移前后数据一致
  • 迁移完成上线后——业务运行——性能稳定
  • 最终实现oracle数据向mysql数据库的平滑过渡

三、迁移方案落地

1.协同高层确定项目目标

这里需要确定的包括迁移源端(如哪几个oracle数据库)、目标端(如迁移到RDS For MySQL、或者机房自建MySQL)

2.制定迁移计划

这里的迁移计划指的是整个迁移过程的整体排期,包含:

  • 前期的迁移工具选型
  • 测试环境搭建
  • 迁移工具测试
  • 对象兼容性统计、对比、改写
  • 全量数据校验方案
  • 压力测试
  • 多次迁移演练、产出迁移方案
    • (该方案指的是迁移的详细操作步骤,方案中的操作步骤建议补充到尽可能详细,防止迁移当天由于任何原因出现操作步骤遗忘等任何故障,当然该方案可以留作下次迁移参考,以及经验总结)
  • 正式迁移
  • 上线后性能调优

那么下面就按照该部分迁移计划中的步骤,叙述详细内容及关键点

四、迁移工具选型(含功能实现原理)

大家再迁移前,可以了解到,迁移涉及到结构迁移和数据迁移,那么在迁移工具选型的时候,需要考虑的几点:

  1. 该工具可以迁移结构、数据还是二者
  2. 该工具迁移前后数据库对象的兼容性
  3. 使用该工具迁移后改写工作量
  4. 是否可以做全量数据校验

这里简单聊几个目前常见的oracle迁移mysql的工具及与原理:

(1)SQL LOAD

这里使用的是powerdesigner,使用该工具迁移结构,首先在plsql中将oracle数据库中的表结构导出csv/sql,使用powerdesigner加载导出的oracle结构语法转换为mysql结构语法,转换后的结构语法存在大量改写:

  1. 表注释、列注释全部保留

  2. 索引数量没有丢失,但是部分唯一索引被修改为普通索引(源库多个索引且全部为唯一索引,这种情况转换后被修改为普通索引)

  3. int数据类型全部转换为numeric,float数据类型没有转换,其他同DTS

  4. 保留了源库的default默认值,没有增加default null

  5. 分区表全部丢失

  6. 存储过程全部丢失

  7. 转换后timestamp类型需要转换其他类型才能导入(测试期间修改为datetime),float没有转换,需要改为double才能导入存在Specified key was too long; max key length is 3072 bytes,需要修改列长度

(2)OGG

Oracle GoldenGate(OGG)可以在多样化和复杂的 IT 架构中实现实时事务更改数据捕获、转换和发送;其中,数据处理与交换以事务为单位,并支持异构平台,例如:DB2,MSSQL等

  • Oracle GoldenGate 数据复制过程如下:
  • 利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作,将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中。再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。
  • 目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息,把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。
  • GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。

但OGG有一个缺陷,做不到全量数据对比!

(3)KETTLE

Kettle是一款国外开源的ETL工具,可以在Windows、Linux、Unix上运行,纯java编写。该工具使用前需要做代码改造,以适用现有的业务场景。

(4)DATAX

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github。

DATAX底层原理:

  • DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

(5)ADAM STUDIO

阿里云官方描述:ADAM推出Oracle数据库平滑迁云解决方案,覆盖Oracle迁移的全生命周期,包括数据库与应用评估(兼容性、关联关系、性能、风险点、应用改造点)、转换(转换不兼容点、引擎特征优化转换)、结构迁移、数据迁移、一致性校验、SQL仿真回放、割接、优化。

这里简单聊一下在测试过程中,对该工具的总结:

1.首先该工具需要搭建一套adam环境,部署一套mysql数据库存储迁移数据,迁移操作以web界面的形式呈现,操作相对较为简单

2.ADAM有一个个人认为非常实用的功能,在分析完结构对象在源端与目标端迁移前后兼容性后,会出一份兼容性报告,报告较为详细,包含了所有的对象的个数,不兼容对象的创建语句(如sequence、存储过程、merge into等),甚至包含这些对象的一些兼容性改写方案,对于无法兼容的对象,也有做标记,便于DBA及研发同学核对。

(6)DTS

  • 数据传输服务DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持RDBMS、NoSQL、OLAP等。
  • DTS自身可以实现结构迁移和数据迁移,结合迁移改造工作量、数据验证几个方案,测试比对各个迁移工具,最终本次oracle迁移mysql使用了DTS工具。
  • DTS工具可以实现数据验证功能,但是DTS仅能含主键或者唯一键约束的表,同时仅验证的是主键这一列的内容一致,DTS即认为数据一致,仍然做不到全量的数据验证

关于DTS同步数据的原理可以类比于OGG,给大家放一张图,如需要深入了解,可以看本人的这篇博客【阿里云DTS原理】

https://blog.youkuaiyun.com/qq_44714603/article/details/105205150

数据迁移工作原理

这里补充几个在DTS在迁移过程中需要改造的几个点:

  1. Default 为Sysdate需要转换为now(),(测试期间,改为CURRENT_TIMESTAMP,这两者是一样的。)
  2. 存在Specified key was too long; max key length is 3072 bytes,需要修改列长度
  3. 补齐丢失的唯一索引
  4. 分区表全部不兼容,需要改写
  5. 存储过程不兼容,需要改写
  6. 外键约束不兼容,需要改写
  7. (mysql中数据库对象不如oracle的多,所以针对自家oracle数据库中的对象,如果oracle中的对象在mysql中没有对应的,一般需要改写)

五、对象兼容性改写

对于对象兼容性这部分,大家需要兼顾人员分配。

  • 相关数据库对象统计,研发与DBA都可以做,这里建议DBA做,因为DBA对数据库的权限相对较高,建议这里DBA与研发协作,互相比对对象统计结。
  • 相关不兼容的数据库对象改写,这里建议研发同学执行,DBA协助技术支持。其实改写SQL是DBA的基本技能,这里建议研发同学改写,DBA同学协助的原因是,在一个项目人员细分较为明确的场景下,往往研发同学对业务更加了解&#x
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值