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 不支持的功能项

  • MySQL 没有并行的概念,不支持并行;
  • MySQL 优化器较弱,复杂 SQL 建议拆分简单 SQL;
  • MySQL 对于子查询优化不是很好;
  • MySQL 不支持物化视图、存储过程改造、同义词改造、dblink 需要改造。

迁移原则

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

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

  • 字符集:确保源 Oracle 数据库与目标 MySQL 数据库之间的字符集兼容;
  • 外键:要提升提取速度,请暂时停用目标 MySQL 数据库上的外键限制条件。加载完成后再启用外键限制条件;
  • 索引:与外键类似,目标 MySQL 数据库上的索引可能会显著降低初始加载的速度。确保在初始加载完成之前,在目标数据库上未创建索引;
  • Oracle 序列:MySQL 支持 AUTO_INCREMENT 而不是序列。确保在初始加载期间停用 AUTO_INCREMENT 特性,以避免覆盖 Oracle 的序列生成的值。在初始加载完成后,将 AUTO_INCREMENT 特性添加到主键列;
  • 网络连接:如果您使用的是 GoldenGate TDM,请确保来源环境和目标环境都可以与 GoldenGate TDM 产品建立网络连接,以允许在 Oracle 端捕获数据并在 MySQL 端加载数据。

迁移难点

参考:

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

字符集

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

字段长度匹配,空间估算

NULL和空串处理

img

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

  • 数据库字段如果是字符串类型,插入空时,load data 默认导入 空字符串
  • 数据库字段如果是数字类型,插入空时,load data 默认导入 0.00000000
  • 数据库字段如果是日期和时间类型,插入空时,load data 默认导入 0000-00-00 00:00:00

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

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

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

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

1
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