oracle mysql 迁移

阅读: 评论:0

oracle mysql 迁移

oracle mysql 迁移

1.下载navicat Premium

2.选中工具

3.点开工具>数据传输(源为传送数据库连接名字,数据库名字,目标为接收数据连接名字,数据库名字)

4.填好点击下一步后,点击开始,显示finally success,表明名倒入成功

5.视图导入

Oracle视图和MySQL视图不同,前者多用视图嵌套子查询,而其刚好时MySQL不支持的,需要将视图子查询改为视图嵌套视图,,如:

create view v_student as select * from (select * from t_student) t;

ERROR 1349 (HY000): View's SELECT contains a subquery in the FROM clause

解决方法,view的嵌套:

create view v_tea_stu as select * from t_student;

Query OK, 0 rows affected (0.02 sec)

create view v_student as select * from v_tea_stu;

Query OK, 0 rows affected (0.00 sec)

6、Trigger、存储过程、package

1)Oracle创建触发器时允许or,MySQL不允许。所以迁移时如果有需要写两个。

2)两种数据库定义变量的位置不同,而且MySQL里不支持%type。这个在Oracle中用得比较频繁。

3)elseif的逻辑分支语法不同,并且MySQL里没有for循环。

4)在MySQL中不可以返回cursor,并且声明时就要赋对象。

5)Oracle用包来把存储过程分门别类,且在package里可以定义公共的变量/类型,既方便了编程,又减少了服务器的编译开销。可MySQL里根本没有这个概念。所以MySQL的函数也不可以重载。

6)预定义函数。MySQL里没有to_char() to_date()之类的函数,也并不是所有的Oracle都是好的,就像substring()和load_file()这样的函数,MySQL有,Oracle却没有。

7)MySQL里可以使用set和=号给变量赋值,但不可以使用:=。 而且在MySQL里没 || 来拼接字符串。

8)MySQL的注释必须要求-- 和内容之间有一个空格。

9)MySQL存储过程中只能使用leave退出当前存储过程,不可以使用return。

10)MySQL异常对象不同,MySQL同样的可以定义和处理异常,但对象名字不一样。

7、分页语句

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

8、JOIN

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

9、group by语句

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

10、bitmap位图索引

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

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

11、分区表(Partitioned table)

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

12、角色

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

13、表情和特殊字符

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

14.数据检验

可以通过count(*)查询总条数,也可以通果etl工具校验

本文发布于:2024-02-01 21:04:43,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679268339406.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:oracle   mysql
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23