一尘不染

从Oracle迁移到MySQL

mysql

我们的Oracle数据库遇到了严重的性能问题,我们想尝试将其迁移到基于MySQL的数据库(直接使用MySQL,或者最好是Infobright)。

问题是,在我们实际上不知道新数据库的所有功能是否符合我们的需求之前,我们需要让旧系统和新系统至少重叠数周(如果不是几个月)。

因此,这是我们的情况:

Oracle数据库由多个表组成,每百万行。白天,实际上有成千上万的语句,我们无法停止迁移。

每天早晨,新数据都会导入到Oracle数据库中,从而替换了数千行。复制此过程不是问题,因此从理论上讲,我们可以并行导入两个数据库。

但是,挑战就在这里,要使此工作正常进行,我们需要从一天开始以一致的状态从Oracle数据库进行导出。(我们不能在星期一导出某些表,而在星期二不能导出其他表,等等。)这意味着,至少导出应在不到一天的时间内完成。

我们最初的想法是转储架构,但是我找不到能够将Oracle转储文件导入MySQL的工具。将表格导出为CSV文件可能会起作用,但恐怕可能会花费太长时间。

所以我的问题是:

我该怎么办?有没有什么工具可以将Oracle转储文件导入MySQL?有人有过大规模迁移的经验吗?

PS:请不要建议Oracle性能优化技术,我们已经尝试了很多:-)

编辑: 我们已经尝试过一些ETL工具,才发现它们不够快:仅导出一张表已经花费了4多个小时…

第二编辑: 来吧……没有人尝试过尽快导出整个数据库并转换数据以便可以将其导入另一个数据库系统吗?


阅读 836

收藏
2020-05-17

共1个答案

一尘不染

Oracle不提供开箱即用的卸载实用程序。

请记住,如果没有有关您的环境的全面信息(Oracle版本?服务器平台?多少数据?什么数据类型?),这里的所有内容都是YMMV,您可能希望在系统上使用它来提高性能和计时。

我的观点1-3只是通用的数据移动思想。第4点是一种将停机时间或中断时间减少到几分钟或几秒钟的方法。

1)有第三方实用程序。我已经使用了其中一些,但最适合您根据自己的意图检查一下。这里列出了一些第三方产品:OraFaq。不幸的是,除非其中的DB服务器在Windows上并且您可以直接在服务器上运行load实用程序,否则它们中的许多都将在Windows上运行,这会减慢数据卸载过程。

2)如果您没有像LOB这样的复杂数据类型,则可以使用SQLPLUS进行滚动。如果您一次创建一个表,则可以轻松对其进行并行化。

3)如果您的年龄在10克以上,则外部表可能是完成此任务的一种有效方法。如果创建具有与当前表相同结构的空白外部表并将数据复制到它们中,则数据将转换为外部表格式(文本文件)。再次,OraFAQ进行救援

4)如果必须将系统并行运行几天/几周/几月,请使用变更数据捕获/应用工具将停机时间几乎设为零。准备支付$$$。我使用了Golden Gate
Software的工具,该工具可以挖掘Oracle重做日志并向MySQL数据库提供插入/更新语句。在上线前一周,您可以在不停机的情况下迁移大量数据。然后在上线期间,关闭源数据库,让Golden
Gate赶上最后剩下的事务,然后打开对新目标数据库的访问。我已经使用它进行升级了,追赶期只有几分钟。我们已经有了Golden
Gate的站点许可证,因此对于我们而言,这并不是什么便宜的事情。

我将在这里扮演Cranky
DBA的角色,并说如果您不能使Oracle表现良好,我很乐意看到有关MySQL如何解决您的特定问题的文章。如果您有一个无法使用SQL的应用程序,那么仍有许多可能的方法来调整Oracle。/肥皂盒

2020-05-17