• 欢迎访问ByWei.Cn,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,加入百味博客 QQ群
  • 已升级为最新版主题,并将持续优化改造中,支持说说碎语功能,可像添加文章一样直接添加说说,博客主题升级啦
  • 感谢您百度求点赞啊!百度网址
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏百味博客吧
  • 博主热烈欢迎 软件定制开发 联系:http://www.bywei.cn

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

数据库 bywei 8年前 (2012-05-01) 2233次浏览 0个评论 扫描二维码

最近工作需要从 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

 


百味博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:从 Oracle 迁移数据到 MySql 方法大全
喜欢 (0)
[微信扫一扫]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址