如何从Oracle导出数据到MySql

12 浏览
0 Comments

如何从Oracle导出数据到MySql

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

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

所以,这里是我们的情况:

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

每天早上,新数据被导入到Oracle数据库中,替换掉数千行数据。复制这个过程不是问题,所以理论上我们可以并行导入两个数据库。

但是,这是一个挑战的地方,为了让它工作,我们需要从Oracle数据库中导出一个具有一致状态的快照。(我们不能在星期一导出一些表,在星期二导出其他表,等等。)这意味着至少导出应该在一天内完成。

我们最初的想法是导出数据库架构,但是我找不到一个能将Oracle导出文件导入MySQL的工具。将表导出为CSV文件可能可行,但我担心这可能需要太长的时间。

所以我的问题是:

我该怎么做?有没有任何工具可以将Oracle导出文件导入MySQL?有没有人有这样大规模迁移的经验?

附注:请不要为Oracle提供性能优化技术,我们已经尝试了很多 🙂

编辑:我们之前尝试过一些ETL工具,结果发现它们速度不够快:仅导出一个表就需要超过4个小时...

第二次编辑:拜托,大家...难道没有人试过尽快导出整个数据库并将数据转换为可以导入另一个数据库系统吗?

0
0 Comments

Oracle无法提供开箱即用的卸载工具。请记住,如果没有关于您的环境的详细信息(Oracle版本?服务器平台?数据量多大?数据类型是什么?),以下所有内容都是因地制宜的,您需要在系统上测试性能和时间。我的1-3点只是一些通用的数据移动思路。第4点是一种可以将停机时间或中断时间减少到几分钟或几秒钟的方法。

1)有一些第三方工具可用。我使用过其中几个,但最好您自己检查一下是否适用于您的目的。这里列出了一些第三方产品:OraFaq 。不幸的是,其中很多在Windows上运行,这会减慢数据卸载过程,除非您的数据库服务器在Windows上并且可以直接在服务器上运行加载工具。

2)如果没有复杂的数据类型(如LOB),则可以使用SQLPLUS自己创建。如果您按表进行操作,那么可以很容易地并行化处理。这个主题在本网站上可能已经被讨论过很多次了,这里有一个例子:Linky

3)如果您使用的是10g+版本,则外部表可能是一种高效的完成此任务的方式。如果创建一些与当前表具有相同结构的空白外部表,并将数据复制到这些表中,那么数据将被转换为外部表格式(文本文件)。再次,OraFAQ可以提供帮助:rescue

4)如果您必须在数天/数周/数月内保持系统并行运行,则可以使用变更数据捕获/应用工具以减少停机时间。但准备好支付费用。我曾使用过Golden Gate Software的工具,它可以挖掘Oracle重做日志并提供插入/更新语句以供MySQL数据库使用。您可以在正式上线前的一周内无需停机迁移大部分数据。然后在上线期间,关闭源数据库,让Golden Gate追赶最后的事务,然后打开新的目标数据库的访问权限。我在升级过程中使用过这个工具,追赶时间只有几分钟。我们已经购买了Golden Gate的许可证,所以对我们来说没有额外费用。

我在这里扮演暴躁的数据库管理员的角色,并说如果您无法使Oracle正常运行,我很愿意看到MySQL是如何解决您特定问题的。如果您有一个无法更改SQL的应用程序,仍然有很多可能的方法来调整Oracle的性能。/soapbox

0
0 Comments

问题出现的原因是Oracle数据库的速度较慢,需要将数据从Oracle转移到MySQL。已经尝试过的ETL工具速度太慢,需要在一天内导出完整的数据库。对于初始数据的导出和导入仍然存在疑问。

解决方法是使用Change Data Capture实现从Oracle到MySQL或Infobright的增量数据的导出。首先需要在Oracle9i或更高版本上实现Change Data Capture功能。然后使用任何ETL技术从Oracle中获取变化的数据。初始数据应该是在特定时间点拍摄的快照数据,可以使用备份作为初始数据的快照。在备份时间点之后,只需获取变化的数据即可。

以下是整理后的

Oracle数据库的速度较慢,因此需要将数据从Oracle转移到MySQL。已经尝试过的ETL工具速度太慢,需要在一天内导出完整的数据库。对于初始数据的导出和导入仍然存在疑问。

解决方法是使用Change Data Capture实现从Oracle到MySQL或Infobright的增量数据的导出。首先需要在Oracle9i或更高版本上实现Change Data Capture功能。然后使用任何ETL技术从Oracle中获取变化的数据。初始数据应该是在特定时间点拍摄的快照数据,可以使用备份作为初始数据的快照。在备份时间点之后,只需获取变化的数据即可。

这种方法有助于将数据从Oracle转移到MySQL,并解决了ETL工具速度慢的问题。通过实现Change Data Capture功能,可以获取增量数据,而初始数据则可以使用备份快照获取。这样,可以更高效地完成数据导出和导入的过程。

0
0 Comments

在这段对话中,提到了一个C#应用程序,可以读取Oracle的dump文件,并将其数据表导入到SQL Server数据库中。这个应用程序每天晚上用于将PeopleSoft数据库迁移到SQL Server上。PeopleSoft数据库有1100多个数据表,而Oracle的dump文件大于4.5GB。

这个应用程序创建了SQL Server数据库和表,并在一个双核Intel服务器上的55分钟内加载了全部4.5GB的数据。作者认为,修改这个应用程序来适应其他数据库应该不是太困难,只要它们有一个ADO.NET提供程序。

然而,作者已经离开了这个公司,无法进一步尝试。但是,他建议将结果发布为博客文章,以便他能看到一些统计数据。

在回答中,Dan提到了对比SQL Server与Oracle的性能。然而,作者不是数据库管理员,所以无法对比它们之间的性能。但是,他可以告诉你,SQL Server的性能足够好,以至于客户可以完全放弃Oracle,并迁移到SQL Server上。

这篇文章讨论了一个方法,即如何将数据从Oracle导入到MySQL。作者提到了一个C#应用程序,该应用程序可以读取Oracle的dump文件,并将其数据导入到SQL Server数据库中。还有这个应用程序的性能和可能的适用范围。最后,还讨论了与SQL Server和Oracle性能的比较。

0