使用sqldeveloper迁移mysql数据库至oracle

我用的sqldeveloper是1.5.0.53的版本。 如果你在机子上装了oracle客户端的话,我们可能会发现一个奇怪的问题,当你执行任何操作的时候可能会发生下面的错误。

oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert
(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert
(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert
(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert
(persistableObject.java:238)
oracle.dbtools.metadata.persistence.persisitableObject.dolnInsert(persistableObject.java:238)
....

oracle.dbtools.metadata.persistence.persistenceException: Protocol Violation


这是因为sqldeveloper用的是oracle 11g的jdbc driver, 如果装了oracle客户端的话, sqldeveloper会用到oracle客户端上的驱动 (这都是oracle_home搞得鬼)。我们在sqldeveloper的主目录下创建一个"sqldeveloper.cmd"的文件, 然后写入以下内容。


SET ORACLE_HOME=%CD%
start sqldeveloper.exe


以前启动sqldeveloper就双击这个cmd文件。 其实这个文件的作用也是很明显的。 就是在启动sqldeveloper时修改oracle_home环境变量 指向当前目录。

在migration之前, 你需要创建一个repository, 这个是个中间库,会记录一下迁移数据库的信息 (就是在数据库中建议写MD_开头的表)。

在sqldeveloper最方便使用的是quick migrate,但是quick migrate只能让你选择是迁移table,data 或者所有。 所以index constraint之类的信息都会迁移过去。

在你source database中选择capture tables 或者 capture schema, 会在Captured Objects视图中出现你捕获的内容, 你可以选择删除掉一些不需要的东西, 比如外键约束,不需要导的表 等等。

准备好你捕获的信息之后,在captured model上单击右键-》Convert to Oracle Model。完成之后会在Converted Objects中生成Converted Model, 然后右键-》Generate 会生成对应的oracle数据库的sql scripts, 然后在你的target数据库运行这些脚本, 你就得到了对应的oracle的数据库结构了。 然后再在Converted Model上点击右键-》 Move Data。 选择source database和target数据库。OK。 让数据慢慢迁移吧。


参考:http://forums.oracle.com/forums/thread.jspa?messageID=2536737&#2536737
阅读更多

没有更多推荐了,返回首页