mysql - 从 Oracle 迁移到 MySQL

标签 mysql oracle import migration dump

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

问题是,在我们真正知道新数据库的所有功能是否符合我们的需求之前,我们需要让新旧系统至少重叠几周甚至几个月。

所以,这是我们的情况:

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

每天早上,都会将新数据导入 Oracle 数据库,替换数千行。复制这个过程是没有问题的,所以理论上我们可以并行导入两个数据库。

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

我们的第一个想法是转储架构,但我找不到将 Oracle 转储文件导入 MySQL 的工具。以 CSV 文件导出表格可能可行,但恐怕会花费太长时间。

所以我现在的问题是:

我该怎么办?是否有任何工具可以将 Oracle 转储文件导入 MySQL?有人有过如此大规模迁移的经验吗?

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

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

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

最佳答案

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

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

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

1) 有可用的第 3 方实用程序。我已经使用了其中的一些,但最适合您自己检查它们是否符合您的预期目的。此处列出了一些第 3 方产品:OraFaq .不幸的是,它们中的很多都在 Windows 上运行,这会减慢数据卸载过程,除非您的数据库服务器在 Windows 上,并且您可以直接在服务器上运行加载实用程序。

2) 如果您没有像 LOB 这样的复杂数据类型,那么您可以使用 SQLPLUS 自行开发。如果你一次做一个表,那么你可以很容易地并行化它。主题可能已在此站点上访问过不止一次,这里是一个示例:Linky

3) 如果您是 10g+,那么外部表可能是完成此任务的一种高效方式。如果您创建一些与当前表结构相同的空白外部表并将数据复制到其中,则数据将转换为外部表格式(文本文件)。再次,OraFAQ 至 rescue .

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

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

关于mysql - 从 Oracle 迁移到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479500/

相关文章:

sql - SQL中WHERE子句下的 'colon'是什么意思?

scala - IntelliJ 无法导入 sbt 项目

php - 使用 mysql 查询中的键和值创建一个 php 数组

mysql - 错误在哪里? (MySQL)

mysql - Mysql/Mariadb必须在“选择”或“更新”中的列之前使用表名

java - 按多个条件拆分列表

java - 不要使用 jdbc 和 jsp 在 mysql 中插入数据

database - 导出数据库 Oracle PL/SQL

java - 错误 :Execution failed for task ':app:processDebugAndroidTestResources' . > java.lang.IllegalArgumentException(无错误消息)

javascript - 如何在 CasperJS 中使用 excel 文件(xlsx)的 'row elements'?