从Oracle迁移数据到MySql方法大全

最近工作需要从Oracle迁移大量数据到MySql,由于涉及不深,便网上学习了很多的方法,现总结Oracle迁移大量数据到MySql如下:

一,使用mysql工具迁移数据

1. MySQL Administrator —— MySQL 服务器的管理利器。这个工具解决了MySQL管理的很多问题,譬如:可以让你简单通过GUI界面模式选择热备份数据库计划,或者是冷备份,你可以方便的选择备份时间,每周或是每日的什么时候进行。
2.MySQL Query Browser —— 查询工具,使用起来也很简单,而且支持调试等功能。
3.MySQL Migration Kit —— 管理工具
4.Navicat for MySQL —— 数据库管理工具

推荐使用Navicat for MySQL功能强大,简单方便(2018/12/18更新)效果如下

oracletomysql

 

二,从oracle导数据到mysql,使用命令
(1)在使用pl/sql developer生成的sql文件然后插入到mysql时由于to_date()和chr()问题,insert时会失败。
(2)phpmyadmin里面有个SQL compatibility mode 的 Oracle选项,具体作用还未知。
(3)DBA高效数据迁移方法:先导出成文本,然后LOAD DATA 命令直接导入。
建议用

select u_id||’&’||u_pid||’&’||str_1||’&’ ||str_2||’&’ ||str_3||’&’||tm_create_time   from table_foo

这样的形式,在sql plus里面导出用&分割的数据,然后在mysql里面用

load data local infile ‘~/table_foo’ into table tbl_gbase_inf fields terminated by ‘&’;

导入。

如果str里面包含多行文本,而默认是文本文件里一行对应数据库里一行数据的,多行文本被误认为是多行数据,格式就不对,导入出错。可以在pl/sql developer里面进行以下查询:

select t.*,’$’ from tbl_foo t

用$作为一行数据的结束符,这样即使遇到回车,mysql仍然能够正确处理了。然后把结果全选,右键菜单导出结果到TSV文件(”导出结果”->”TSV 文件”)。这个文件的格式就是一行一项数据的文本文件了,而且字段之间是用tab分隔的,正好就是load data命令的默认分隔符。
在select语句里加了一个’$’作为最后一个域,也就是说在文本文件里,它前面会有一个tab,后面会有一个回车换行。所以要用ultraedit把’\t\$\r\n'(Ultredit正则)都替换成’$’,这样一搞,文本文件基本上没法看了,但在load edit眼里,它就是一个正好合胃口的美味的数据源了。用如下命令导入:

load data local infile ‘~/table_foo’ into table tbl_gbase_inf lines terminated by ‘%’;show warnings;

回车搞定。可以在文件名和into之间插上replace关键字,自动替换掉原有数据。 注意,load data可能不是立即生效的,可以show processlist;看看是否被delay了,过一段时间表没人访问应该就会插进去了。  另外,如果插入的中文显示出来是乱码,就用
show   variables   like   “%char%”;

看看结果是不是长这样的:

+————————–+—————————-+
| Variable_name            | Value                      |
+————————–+—————————-+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+————————–+—————————-+

如果database或server的字符集不是utf8,用set 命令将其改为utf8,然后重新load data,应该就不会是乱码。

三,牛人编写的Oracle到MySQL的数据迁移工具

从Oracle迁移数据到MySQL的小程序,ora2mysql下载 ora2mysql
使用方法如下:
D:\>ora2mysql user1=scott/tiger user2=/@localhost:3306:test table=emp
0 rows processed at 2011-04-02 15:03:08.
2 rows processed at 2011-04-02 15:03:08.

在速度方面,由于不支持Array操作,因此速度比较慢,希望Oracle能让SQL * Plus也能连接MySQL库,或改造一下MySQL客户端,增加Array接口。

D:\>ora2mysql user1=scott/tiger user2=/@::test table1=emp_bak table2=emp
0 rows processed at 2011-04-02 19:48:51.
100000 rows processed at 2011-04-02 19:49:17.
200000 rows processed at 2011-04-02 19:49:42.
300000 rows processed at 2011-04-02 19:50:07.
400000 rows processed at 2011-04-02 19:50:32.
500000 rows processed at 2011-04-02 19:50:57.
600000 rows processed at 2011-04-02 19:51:23.
700000 rows processed at 2011-04-02 19:51:48.
800000 rows processed at 2011-04-02 19:52:14.
900000 rows processed at 2011-04-02 19:52:39.
1000000 rows processed at 2011-04-02 19:53:03.
1100000 rows processed at 2011-04-02 19:53:29.
1200000 rows processed at 2011-04-02 19:53:56.
1300000 rows processed at 2011-04-02 19:54:24.
1400000 rows processed at 2011-04-02 19:54:53.

目前还不支持BLOB类型, 也不支持字符集的设置

作者地址:http://www.anysql.net/tools/oracle-mysql-data-migration-tool.html/comment-page-1#comment-4146

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 × 2 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据