mysql 建表_斗转星移Oracle到MySQL离线迁移的三种方法评测

本文详细介绍了从Oracle数据库到MySQL的三种迁移方法:MySQL Migration Toolkit、Navicat Premium和Kettle。每种方法都涉及了建表、数据迁移及字符集配置等关键步骤。在迁移过程中,需要注意Oracle特有的数据类型转换和关键字处理。Kettle虽然更灵活,但可能需要更多的手工配置。
摘要由CSDN通过智能技术生成

背景:

    因工作需要,最近对Oracle到MySQL的迁移方式进行了一些研究,现发布出来,供大家参考。

MySQL Migration Toolkit

•进入界面

da2f69364e24917de33dc93c38203fee.png

•选择配置类型

2ef5b33ddbc16096cff4ba82ff672870.png

•配置源数据库信息

75a454be80df0cc2675395d37ca4babb.png

•配置目标库信息

3b3fce5afe6354bb3f2ccb5b9fa173be.png

•连接源库,并获取元数据信息,并测试目标库信息

b32808a5bbba170ac2e939ac3e27f5aa.png

•选择源库SCHEMA

23b68cd35e8f12bc36064b75efaa2c39.png

• 获取迁移选项

b516128a5abd2e71a26801d22641de27.png

•选择迁移对象

a564df8d190640ae64470a77f4985d43.png

-- 如果需要并行迁移,则需要在此处进行对象区分

3e5d275daf349d9ea19f5d3291af9020.png

•配置迁移选项

414d428e7817838a33d6a945d29186b0.png

SCHEMA属性 可以选择字符集,需要注意的是默认为latin1,该字符集不支持中文。

              选择MulitLanguage后,字符集会变成UTF8,但是MySQL中UTF8字符集是伪UTF8,应使用UTF8MB4字符集,但是此处不可选,即使手工将字符集填写为UTF8MB4,迁移后的目标库字符集仍为UTF8MB4

表相关属性

该项参数涉及到目标库存储引擎,以及字符集,注意第二个选项,默认存储引擎为MyISAM

代码相关属性,主要是指包,过程,函数等对象

•生成对象创建语句

9d5875a1bdd1f071e84460f7dc240365.png

•对象对比视图

a78a4a2bbd1322c206fd6a0eae2879d1.png

点击单个对象,可查看对象结构明细

e25b628436cd8b7440decd1a16d47590.png

对于Oracle中独有的rowid数据类型,会进行特殊标记,并转换为VARCHAR(255)

9bc6774210d3bb8f9d33e70fe07f508f.png

如需指定字符集为UTF8MB4需在此处进行手工修改,且要进行逐表修改

e56652ada4fcf497fd51041bdace7bfd.png

下图做了一个对比,发现没有手工修改字符集的表,其字符集为UTF8

91080021750208fbbf891dfd209b17a1.png

同时需要注意,默认是删表重建,如想保留表,则需要对脚本进行修改

9bc6774210d3bb8f9d33e70fe07f508f.png

删除DROP语句,修改create table语句

007fb1c6ac4671cab1cc42fdb73c2570.png

在迁移前插入测试数据

056725b5da1835dfe91af40fc2f86dfc.png

迁移后数据仍在

select *    from dept ;--------+------------+----------+| deptno | dname      | loc      |+--------+------------+----------+|     50 | aa         | ccc      ||     10 | ACCOUNTING | NEW YORK ||     20 | RESEARCH   | DALLAS   ||     30 | SALES      | CHICAGO  ||     40 | OPERATIONS | BOSTON   |+--------+------------+----------+5 rows in set (0.00 sec)

•在目标库建立对象

d4068562ad01cd40ea52c3afda80a0c8.png

69993c15048c749038fb5dd8a08d4468.png166e24cb6084895dc0341804f20ddf9a.png

•迁移数据

008275aa81b6ebb2307df65284980969.png1fa0c2d812421ad4df0ecf1512223bc9.png

94eb896f1aa0dc660fe3cfca203ba6fc.png

•查看迁移报告

7d35385f9c94d591eafe6baf8271cb17.png

附 更改目标库名称

080e4bfb06fe2d97ad28a258ed0654bf.png

使用Navicat Premium 迁移

•建立数据库连接

d5d9d8980684e5426ee05ce732d103c1.png

daa7a69f0c6823699a19445a8e22b62c.png

•选择字符集

9bb070bd415c89067be0a7d8c9b6bcab.png

•进行数据传输

0b6135d5716386cf7e0f6695e25c6662.png

•选择源库与目标库

3ff0ad4677c7e2b38d554c436607abc3.png

6954037b5551b87152e60ab9e1ca5071.png

•选择表

f5cf710390d7d38da0c3a3018eff24a0.png

•进行传输

7c2f7a962d2a5b41b552bd0d8eeba180.png

使用Kettle进行迁移

启动Kettle

113ea349b52dd17d6c2717c427e29af3.png

新建作业并配置数据库连接

56459a497aaf2ba2883e8996b1e38648.png

05095372eac87c6bc8050d79cc6006ee.png

d0d3ba688c37fb96664a2aeea2a52d22.png

运行多表复制向导

609eacb59762b8912139debce4505cef.png

指定源库与目标库

ae5d8f21027b5d30b035e6e43e60833b.png

指定源库与目标库

ae5d8f21027b5d30b035e6e43e60833b.png

Kettle会自动创建转换作业,在此指定转换存储位置

d2abbe719a69b6f968fc367be201c058.png

执行转换

887a52ec57ac8713e73174dbada92515.png

注意:

执行的过程非常的坎坷,遇到两个问题:

1 建表语句存在关键字引起的建表失败,需要手工调整建表语句,进行特殊处理。

2 数据类型转换不理想,需要手工调整。

对比

标准Mysql Migration ToolsNavicat PremuimKettle
是否收费
支持的版本Oracle 11.2无限制无限制
适用平台WINDOWSWINDOWSWINDOWS ,LINUNX
是否支持并行不支持单机并行不支持单机并行支持单机并行、支持集群操作
是否支持自定义字符集是 逐表修改
是否支持自定义列类型是 主表修改或提前建表
是否支持提前建表
是否支持选取部分表
是否支持垂直分库
是否支持水平分库
是否有迁移日志
是否带有索引
是否支持字符串换行
是否支持BLOB类型迁移否(仅部分成功且不抱错)
Oracle数据类型Mysql Migration ToolsNavicat PremuimKettle
NUMBERdecimal(22,0)decimal(65,30)double
NUMBER(10,4)decimal(10,4)decimal(10,4)double
VARCHAR2(200)varchar(200)varchar(200)varchar(200)
CHAR(10)char(10)char(10)varchar(10)
CHAR(2000)varchar(2000)texttext
DATEdatetimedatetimedatetime
TIMESTAMP(6)datetimedatetimedatetime
LONGlongtextlongtexttinytext
RAWmediumbloblongblobtext
BLOBlongbloblongbloblongblob
CLOBlongtextlongtextmediumtext
ROWIDvarchar(255)不支持,报错中断tinytext

总结:对比下来,Kettle更加灵活可靠,但由于是通用ETL工具,部分内容较为粗放,需要手工配置的地方更多。受时间限制,部分功能尚待挖掘,如参数化、并行、集群等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值