从Oracle迁移到MySQL

Dan*_*oap 24 mysql migration oracle import dump

我们的Oracle数据库遇到了严重的性能问题,我们希望尝试将其迁移到基于MySQL的数据库(MySQL直接或更优选的是Infobright).

问题是,如果新数据库的所有功能都符合我们的需求,我们需要让新系统和新系统重叠至少几周(如果不是几个月).

那么,这是我们的情况:

Oracle数据库由多个表组成,每个表包含数百万行.在白天,有数以千计的陈述,我们无法停止迁移.

每天早上,新数据都会导入Oracle数据库,取代数千行.复制此过程不是问题,因此理论上我们可以并行导入两个数据库.

但是,这里的挑战在于,为了实现这一目标,我们需要从Oracle数据库导出一天的一致状态.(周一我们不能导出一些表,周二也不能导出其他表等)这意味着,至少导出应该在不到一天的时间内完成.

我们的第一个想法是转储模式,但我找不到将Oracle转储文件导入MySQL的工具.以CSV文件导出表可能有效,但我担心这可能需要很长时间.

所以现在我的问题是:

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

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

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

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

Dav*_*ann 6

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

请记住,没有关于您的环境的全面信息(oracle版本?服务器平台?有多少数据?什么数据类型?)这里的所有内容都是YMMV,您可能希望在系统中为性能和时序做好准备.

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

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

2)如果您没有像LOB这样的复杂数据类型,那么您可以使用SQLPLUS进行自己的数据类型.如果你一次做一个表,那么你可以轻松地并行化它.这个网站上访问的主题可能不止一次,这里有一个例子:Linky

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

4)如果必须将系统并行保存数天/数周/月,则使用更改数据捕获/应用工具以实现接近零的停机时间.准备支付$$$.我使用了Golden Gate Software的工具,可以挖掘Oracle重做日志并为MySQL数据库提供插入/更新语句.您可以迁移大部分数据,而不会在上线前一周停机.然后在您的上线期间,关闭源数据库,让Golden Gate赶上最后剩余的事务,然后打开对新目标数据库的访问.我用它进行升级,赶上时间只有几分钟.我们已经获得了Golden Gate的站点许可证,因此对我们来说没有什么可以自掏腰包的.

我将在这里扮演Cranky DBA的角色,并说如果你不能让Oracle表现良好,我很乐意看到MySQL如何修复你的特定问题.如果您的应用程序无法触及SQL,那么仍​​有许多方法可以调优Oracle./肥皂盒


STL*_*Dev 5

我已经构建了一个C#应用程序,它可以读取Oracle转储(.dmp)文件并将其数据表泵入SQL Server数据库.

此应用程序每晚在生产基础上使用,以将PeopleSoft数据库迁移到SQL Server.PeopleSoft数据库有1100多个数据库表,Oracle转储文件的大小超过4.5GB.

此应用程序创建SQL Server数据库和表,然后在不到55分钟的时间内在双核英特尔服务器上运行所有4.5GB的数据.

我不认为修改此应用程序以与其他数据库一起工作会很困难,只要它们具有ADO.NET提供程序.