2MUCH

oracle->mysql数据迁移数据事项

2022-12-04


oracle->mysql数据迁移数据事项

概述

从oracle数据迁移到mysql前,需要特别关注两者的区别,才能做好相应的转换及评估。

ORACLE&MYSQL主要差异

图片来源: https://www.infoq.cn/article/rc7urvfsmv94jcaw3z2a

img

img

img

img

img

img

img

img

img

img

img

img

MySQL 不支持的功能项

迁移原则

参考: https://www.infoq.cn/article/rc7urvfsmv94jcaw3z2a

迁移数据时,请遵循以下准则,其中大部分准则同时适用于一次性加载方法和实时复制方法:

迁移难点

参考:

https://www.infoq.cn/article/rc7urvfsmv94jcaw3z2a

字符集

对于字符集,需要考虑的问题为迁移过程字段长度匹配情况,迁移后数据是否乱码,以及迁移后字符集转换后空间的问题。

字段长度匹配,空间估算

NULL和空串处理

img

使用文件导入到 MySQL 时字段中的空值 null 需要使用\N 表示,如果用空字符串表示,那么根据不同的数据类型,MySQL 处理也各异。

Oracle 导出到文本文件,null 会变为空字符串,插入到 MySQL 后会被认为是空字符串插入,破坏了数据一致性,以下提供了三种方式进行规避:

1、可以在 Oracle 迁移之前将所有业务表的 null 值变更为无意义的值,等到迁移到 MySQL 后统一数据修复调整回来,例如:

UPDATE SUPPLIERS_TBL SET SUPPLIER_ID=NVL(null,‘N/A’) where SUPPLIER_ID is null;

2、使用 spool 导出的时候对 null 值进行转换,需要针对表和列进行修改

SelectNVL(TO_CHAR(id),'N/A')||','||NVL(name,'N/A')||','||NVL(SEX,'N/A')||','||NVL(ADDRESS,'N/A')||','||NVL(TO_CHAR(BIRTHDAY),'N/A') from user1;

日期格式处理

LOB 字段迁移

大小写敏感差异

数据类型转换

https://www.cnblogs.com/priestess-zhao/p/14308959.html

参考链接

https://www.infoq.cn/article/rc7urvfsmv94jcaw3z2a

https://zhuanlan.zhihu.com/p/94254106

https://blog.csdn.net/weixin_39713763/article/details/114906285

https://juejin.cn/post/6943857884006449183

https://developer.aliyun.com/article/184151

https://blog.csdn.net/xiazaixm/article/details/78081611

https://www.cnblogs.com/priestess-zhao/p/14308959.html