繁体   English   中英

从Oracle迁移到MySQL

[英]Migrate from Oracle to MySQL

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

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

因此,这是我们的情况:

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

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

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

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

所以我的问题是:

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

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

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

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

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

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

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

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

2)如果您没有像LOB这样的复杂数据类型,则可以使用SQLPLUS进行滚动。 如果您一次创建一个表,则可以轻松地对其进行并行化。 可能已经多次访问了此主题,这里有一个示例: Linky

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

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

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

我建立了一个C#应用程序,可以读取Oracle转储(.dmp)文件并将其数据表泵送到SQL Server数据库中。

该应用程序每天在生产环境中使用,以将PeopleSoft数据库迁移到SQL Server。 PeopleSoft数据库具有1100多个数据库表,Oracle转储文件的大小大于4.5GB。

该应用程序创建SQL Server数据库和表,然后在不到55分钟的时间内在双核Intel服务器上运行,加载所有4.5GB的数据。

我认为修改此应用程序以使其与具有ADO.NET提供程序的其他数据库一起工作不会太困难。

是的,Oracle非常慢。 :)

您可以使用任意数量的ETL工具将数据从Oracle移到MySQL。 我最喜欢的是SQL Server集成服务。

如果您具有Oracle9i或更高版本,则可以实施Change Data Capture。 在此处阅读更多信息http://download-east.oracle.com/docs/cd/B14117_01/server.101/b10736/cdc.htm

然后,您可以使用任何ETL技术从Oracle到您的MySQL或Infobright进行大量更改。

我已经使用Pentaho Data Integration从Oracle迁移到MySql(我也将相同的数据迁移到Postresql,速度大约快50%,我猜这很大程度上是由于使用了不同的JDBC驱动程序)。 我几乎遵循这封信,遵循罗兰·鲍曼(Roland Bouman)的指示,对它的简单程度感到非常惊喜:

将表数据从一个数据库复制到另一个数据库

我不知道它是否适合您的数据加载,但是值得一试。

我最近发布了etlalchemy以完成此任务。 它是一个开放源代码的解决方案,允许使用4行Python在任意2个SQL数据库之间进行迁移,并且最初设计为从Oracle迁移到MySQL。 添加了对MySQL,PostgreSQL,Oracle,SQLite和SQL Server的支持。

这将照顾到迁移模式(可以说是最具挑战性的),数据,索引和约束,还有更多可用选项。

安装:

$ pip install etlalchemy

在El Capitan上pip install --ignore-installed etlalchemy

跑步:

from etlalchemy import ETLAlchemySource, ETLAlchemyTarget

orcl_db_source = ETLAlchemySource("oracle+cx_oracle://username:password@hostname/ORACLE_SID")

mysql_db_target = ETLAlchemyTarget("mysql://username:password@hostname/db_name", drop_database=True)
mysql_db_target.addSource(orcl_db_source)
mysql_db_target.migrate()

关于性能 ,此工具在各种RDBMS中使用BULK导入工具,例如mysqlimportCOPY FROMpostgresql ),以高效地进行迁移。 我能够在40分钟内将具有33105951行的5GB SQL Server数据库迁移到MySQL,并在13分钟内将3GB 7000000行的Oracle数据库迁移到MySQL。

要获得有关项目起源的更多背景信息, 请查看这篇文章。 如果在运行该工具时遇到任何错误,请在github存储库上打开一个问题,我将在不到一周的时间内对其进行修补!

(要安装“ cx_Oracle” Python驱动程序,请按照以下说明进行操作

我们有同样的问题。 需要从oracle dbms到mysql dbms获取表和数据。

我们使用了我们在网上找到的工具...效果很好。

http://www.sqlines.com/download

该工具基本上可以帮助您:

  1. 连接到您的源DBMS(ORACLE)
  2. 连接到目标DBMS(MySQL)
  3. 在要迁移的ORACLE DBMS中指定架构和表
  4. 按下“传输”按钮以运行迁移过程(运行内置的迁移查询)
  5. 获取传输日志,该日志将告诉您从目标数据库中的SOURCE和WRITTEN中读取了多少条记录,哪些查询失败。

希望这会帮助其他将解决此问题的人。

您可以使用Python,SQL * Plus和mysql.exe (MySQL客户端)脚本复制仅查询结果的整个表。 由于所有这些工具都存在于Windows和Linux中,因此它将是可移植的。

当必须这样做时,我使用Python实现了以下步骤:

  1. 使用SQL * Plus将数据提取到CSV文件中。
  2. 使用mysql.exe将转储文件加载到MySQL中。

您可以通过使用表/分区/子分区执行并行加载来提高性能。

披露: Oracle到MySQL的数据迁移器是我为Windows OS上的Oracle and MySQL之间的数据集成编写的脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM