加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 服务器 > 安全 > 正文

从Oracle迁移到MySQL的各种坑及自救方案

发布时间:2021-01-11 12:24:31 所属栏目:安全 来源:网络整理
导读:副标题#e# 《从Oracle迁移到MySQL的各种坑及自救方案》要点: 本文介绍了从Oracle迁移到MySQL的各种坑及自救方案,希望对您有用。如果有疑问,可以联系我们。 本文根据冯帅老师在〖4月8日DBAplus社群上海数据库技术沙龙〗现场演讲内容整理而成. 讲师介绍 冯
副标题[/!--empirenews.page--]

《从Oracle迁移到MySQL的各种坑及自救方案》要点:
本文介绍了从Oracle迁移到MySQL的各种坑及自救方案,希望对您有用。如果有疑问,可以联系我们。

本文根据冯帅老师在〖4月8日DBAplus社群上海数据库技术沙龙〗现场演讲内容整理而成.

讲师介绍

冯帅

点融网高级DBA

  • 获有Oracle OCM、MySQL OCP,目前从事MySQL相关的运维和架构工作,擅长异构数据库交互.

当企业内部使用的数据库种类繁杂时,或者有需求更换数据库种类时,都可能会做很多数据迁移的工作.有些迁移很简单,有些迁移可能就会很复杂,大家有没有考虑过为了顺利完成复杂的数据库迁移任务,都需要考虑并解决哪些问题呢?

在以前的工作中,我迁移过Oracle到Informix、Oracle和SQLServer、Oracle到MySQL. 在目前的公司又因为去O的关系,做了大量的迁移工作,栽了不少坑,所以和大家交流一下在迁移的过程中的一些实践.

分享大纲:

  1. 去O前的准备与考虑
  2. 确定目标数据库
  3. 表和数据对象的迁移及工具比较
  4. 其它对象的迁移
  5. 一些性能参数

一、去O前的准备与考虑

因为成本预算等多方面原因,公司决定要去O,在去O之前首先要决定拿什么来替代Oracle,拿什么工具将源数据库的数据导到目标数据库、怎么导等的.导的过程的增量数据怎么处理.导的时候源数据和目标,以及数据的数据类型差异如何处理,像视图、存储过程、触发器这种数据库对象之间的不同怎么解决,导的时候如何不影响源数据库性能.导完以后的数据比对以及数据无误后应用的性能问题都是要考虑的.

二、确定目标数据库

在我们做数据迁移之前先确认的就是target database,就是要迁到什么数据库上,经过了一些调研,从速度、流行度等多个方面选择最终了MySQL.因为相信被Oracle收购后表现会越来越好.

当然也想过使用PosgreSQL,不过做了一个测试,发现MySQL5.7的QPS在比同样配置的PG要高,基于在线事务对性能的要求,最终还是选择了MySQL.选择了MySQL以后,对于MySQL的分支和版本的选择也很头痛.Percona增加了很多性能相关补丁,MariaDB支持更多的引擎,官方的版本也能满足目前的需求,从保守的原则上,我们的核心数据库最终还是使用了官方的版本,一些不是太核心的数据库,其它的分支也有在用.

因为MyCat的支持关系最终选择的是5.6的版本(目前MyCat1.6对MySQL5.7的支持不是太好),为了达到像Oracle的DG/OGG一样稳定的架构,我们把MySQL的架构做成了双机房的MHA,并且用了MyCat做了读写分离.同样的Oracle这边因为同时还有应用在跑,为了分散Oracle的压力,所有的同步作业也是在备库和异机房的OGG端进行的操作.

三、表和数据对象的迁移及工具对比

在选择了合适的DB来替换Oracle后,下一步就是选择一个合适的迁移工具来做迁移.我们在迁移工具的选择方面花费了大量时间和精力.迁移是一个漫长而困难的工作,我们在迁移的过程中也历经了不同的阶段,使用了不同的方法.从最初级的load csv升级成自已写的程序,再去找Oracle和MySQL官方推荐的工具,最后也尝试了一些 ETL的工具,被这么多工具摧残之后,幸运的是能够在不同的场情下使用不同的方式.

接下来我们对每一种都进行一个简单的介绍和使用中遇到的一些问题.

1、SQL LOAD

我们在最早的时候只是进行某个项目的迁移工作,因为时间的关系并没有进行迁移工具的选型以及使用,使用了最简单的方式就是SQL LOAD.

所有的操作步骤比把大象放进冰箱还要简单,简单得只要分两步,第一步把Oracle的数据导成CSV或者SQL,然后再load或者source到MySQL中就可以了.

把Oracle的数据导成CSV或者SQL可以用很多工具,比如SQL developer或者toad,不过我还是更推荐spool,大家应该都用过spool,他可以结合set把内容输出到指定的文件中,然后选择合理的行列分隔符,就可以产生csv文件了.

使用SQL LOAD的优点就是速度快和超级简单,不过同样的,它也会有很多弊端,它很难做成自动化和全面普及到很多张表上,每有一张表的操作就要写SQL拼CSV,然后还不能保证是一样的分隔符,大多数时候对lob字段操作也很麻烦.对类似于comments的评论字段也很难原样的copy过去.

我们来看一个简单的例子:

第一步我先在Oracle这边创建了一张表,很简单只有四列,然后insert了三条数据查看了一下内容.

做了一些简单的可能会用到的查询.

看一下导出用的spool的内容,实际用的时候肯定会比这个更复杂,要对换行、time、lob等进行更多的函数处理.然后把数据导了出来看一下.

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读