事实是,如果不是几个月,我们需要让旧的和新的系统重叠至少几个星期,而在我们真正了解之前,如果新数据库的所有功能符合我们的需求.
所以,这是我们的情况:
Oracle数据库由包含数百万行的多个表组成.白天,有数以千计的声明,我们不能停止迁移.
每天早上,将新数据导入到Oracle数据库中,取代数千行.复制这个过程不是一个问题,所以在理论上我们可以并行地导入这两个数据库.
但是,这里面临的挑战在于,为了实现这一目标,我们需要从Oracle数据库导出一天的一致状态. (星期一我们不能出口一些桌子等等)这意味着至少出口应该在不到一天的时间内完成.
我们的第一个想法是转储模式,但是我无法找到一个将Oracle转储文件导入MysqL的工具.导出CSV文件中的表可能会起作用,但恐怕可能需要太长时间.
所以我现在的问题是:
我该怎么办?有什么工具可以将Oracle转储文件导入MysqL吗?有没有人有这样大规模迁移的经验?
PS:请不要为Oracle提出性能优化技术,我们已经尝试了很多:-)
编辑:我们以前已经尝试过一些ETL工具,只能发现它们的速度还不够快:只输出一个表已经花了4个多小时…
请记住,没有关于您的环境(oracle版本?服务器平台?多少数据?什么数据类型)的全面信息?这里的所有内容都是YMMV,您将希望在系统上执行性能和时间安排.
我的点1-3只是通用数据运动的想法.点4是一种可以减少停机时间或中断到几分钟或几秒钟的方法.
1)有第三方实用程序可用.我已经使用了其中的一些,但最适合你自己检查出你的预期目的.几个第三方产品列在这里:OraFaq.不幸的是,很多人在Windows上运行,这将减慢数据卸载过程,除非您的DB服务器在Windows上,并且可以直接在服务器上运行加载实用程序.
2)如果您没有像LOB这样的复杂数据类型,那么您可以使用sqlPLUS滚动自己的数据类型.如果您一次做了一张桌子,那么您可以轻松地并行化.主题已经在这个网站上访问了大概不止一次,这里是一个例子:Linky
3)如果你是10g,那么外部表可能是一个执行这个任务的方法.如果创建一些与当前表格相同结构的空白外部表,并将数据复制到其中,则数据将被转换为外部表格式(文本文件).再次,OraFAQ到rescue.
4)如果您必须将系统并行保存数天/周/月,则可以使用更改数据捕获/应用工具进行近零停机.准备支付$$$.我使用金门软件的工具,可以挖掘Oracle重做日志,并将插入/更新语句提供给MysqL数据库.您可以迁移大部分数据,而不要在上线之前的一周内停机.然后在生命周期期间,关闭源数据库,金门追赶最后剩余的事务,然后打开对新目标数据库的访问.我已经使用这个升级了,追赶期只有几分钟.我们已经有了金门的网站许可证,所以对我们来说这并不是什么东西.
我会在这里扮演Cranky DBA的角色,说如果你不能让Oracle表现不错,我很乐意看看MysqL如何解决你的特定问题.如果您有一个应用程序无法触及sql,那么还有很多可能的方式来调整Oracle. /肥皂盒