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

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

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

4?分页语句

MySQL中使用的是limit关键字,但在Oracle中使用的是rownum关键字.所以每有的和分页相关的语句都要进行调整.

5?JOIN

如果你的SQL里有大量的(+),这绝对是一个很头疼的问题.需要改写.

6?group by语句

Oracle里在查询字段出现的列一定要出现在group by后面,而MySQL里却不用.只是这样出来的结果可能并不是预期的结果.造成MySQL这种奇怪的特性的归因于sql_mode的设置,一会会详细说一下sql_mode.不过从Oracle迁移到MySQL的过程中,group by语句不会有跑不通的情况,反过来迁移可能就需要很长的时间来调整了.

7?bitmap位图索引

在Oracle里可以利用bitmap来实现布隆过滤,进行一些查询的优化,同时这一特性也为Oracle一些数据仓库相关的操作提供了很好的支持,但在MySQL里没有这种索引,所以以前在Oracle里利于bitmap进行优化的SQL可能在MySQL会有很大的性能问题.

目前也没有什么较好的解决方案,可以尝试着建btree的索引看是否能解决问题.要求MySQL提供bitmap索引在MySQL的bug库里被人当作一个中级的问题提交了上去,不过至今还是没有解决.

8?分区表(Partitioned table)

需要特殊处理,与Oracle的做法不同,MySQL会将分区键视作主键和唯一键的一部分.为确保不对应用逻辑和查询产生影响,必须用恰当的分区键重新定义目标架构.

9?角色

MySQL8.0以前也没有role的对象.在迁移过程中如果遇到的角色则是需要拼SQL来重新赋权.不过MySQL更好的一点是MySQL的用户与主机有关.

10?表情和特殊字符

在Oracle里我们一般都选择AL32UTF8的字符集,已经可以支付生僻字和emoji的表情了,因为在迁移的时候有的表包含了大量的表情字符,在MySQL里设置了为utf8却不行,导过去之后所有的都是问号,后来改成了utf8mb4才解决问题,所以推荐默认就把所有的DB都装成utf8mb4吧.

Oracle和MySQL差异远远不止这些,像闪回、AWR这些有很多,这里只谈一些和迁移工作相关的.

五、数据校验

当数据迁移完成后,如何确保数据的正确迁移、没有遗漏和错误是一个很难的问题.这里的难不是实现起来困难,而是要把它自动化,达到节省人力的目标有点难,因为两者的数据类型不同,数据量偏大,写一些脚本去做检查效果不大.

我们的数据校检工作主要分为在导入过程中的log和警告,在load的时候SHOW WARNINGS和errors,在使用Python、OGG、Kettle等工具时详细去看每个errors信息.

1、count(*)

迁移或增量操作完成以后,用最简单的count(*)去检查,在MySQL和Oracle上检查进行比对.如果数据量一致,再进行数据内容的验证.由于数据量太大,只进行了抽样检测.人工的手动检验如果没有问题了,可以使用应用程序对生产数据库的副本进行测试,在备库上进行应用程序的测试,从而进行再一次的验检.

2、etl工具

另外推荐的一种方式就是使用etl工具配置好MySQL和Oracle的数据源,分别对数据进行抽取,然后生成cube,进行多纬度的报表展现.数据是否有偏差,可以一目了然看清.

数据的完整性验证是十分重要的,千万不要怕验证到错误后要花好长时候去抽取同步的操作这一步.因为一旦没有验证到错误,让数据进行了使用却乱掉了,后果将更严重.

3、SQL_MODE

https://dev.MySQL.com/doc/refman/5.5/en/sql-mode.html

MySQL服务器能够工作在不同的SQL模式下,针对不同的客户端,以不同的方式应用这些模式.这样应用程序就能对服务器操作进行量身定制,以满足自己的需求.这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查.

  • TRADITIONAL

设置“严格模式”,限制可接受的数据库输入数据值(类似于其它数据库服务器),该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”.

  • ONLY_FULL_GROUP_BY

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

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

热点阅读