Owen的酒楼

--酒楼上渡过的人生--
生命太短,人生太长,但愿别喝醉了。

导航

Migration mass DB from Mysql to Oracle (原创)

Posted on 2008-06-17 15:11  Hicome  阅读(274)  评论(0编辑  收藏  举报

主要工具:Oracle SQL Developer1.5.0.53 - Migration
原因:由于数据量越来越大,mysql也越来越承受不了,访问速度开始变慢。
情况:mysql里有31张表,其中有2张表的数据超大(2G左右)。由于此工具对这么大的数据处理是无能为力的,所以采用以下办法:
1)先把另外数据量少的29张利用工具能完美地导到Oracle。
2)然后把数据量超大的2张表分步地手工地在命令行里导入Oracle。

1. Oracle SQL Developer Tool
先把Mysql和Oracle的DB连接到Tool里面。
1)先Create Repository
2) 在Tool的Connections里选中Mysql右键Capture Mysql. 这步如果有问题,通常解决办法就是把以前的那些Repository DB删掉。
3) 在Captured Objects框里要把一些Sequences, Views, Indexes删除掉,同时把数据超大的那两张表A,B也删除掉。
4)在Captured Objects框里右键Convert to Oracle Mode, 然后在Converted Objects框里造句选中右键Generate产生建那29张表的sql语句,里面的开头语句关于新建一个与Mysql DB同名的Oracle DB。
5)执行sql语句新建一个DB和29张表。
6)在Converted Objects框里造句选中右键Move Data即可。


2. 导入数据量超大的2张表A和表B。
1) 按照1的步骤执行到第4步时,选Generate Data Move Scripts产生保存一些脚本,再找出A.ctl和B.ctl。
2) 在Oracle DB里独立为表A和表B建表,其中必须注意的是:a. 字段不能少,属性要一样,包括是否为空选项也要一样。b. 表里每个字段顺序必须与Mysql里表的字段顺序一样.
3) 用如下命令把表A和表B的数据导出:
只导出纯数据,不包含建表的脚本的TXT文件。 (在linux命令行下执行)
sudo mysqldump reader_prod Atable -v --host=localhost --port=3306 -T tmp  --fields-terminated-
by="<EOFD>" --lines-terminated-by="<EORD>" --fields-escaped-by=''
4) 然后在oracle用户linux使命令行下执行:
sqlldr userid=username/password control=A.ctl
sqlldr userid=username/password control=B.ctl
注意:用户对文件的权限必须是可读可写。


另:如果你本机已经安装了Oracle的管理客户端,在使用Tool启动时会调用Oracle的管理客户端的JDBC jar包。但Tool需要用回自己的Jar包。所以需要手动做一个启动文件star.cmd

SET ORACLE_HOME=%CD%
START SQLDEVELOPER.exe