【发布时间】:2013-01-31 21:17:16
【问题描述】:
我正在尝试将我公司的旧 MySQL 数据库迁移到 SQL Server 2008。
我正在使用 MySQL 软件的 SQL Server 迁移助手,除了大型表(一些包含大约 1.5 亿多行)之外,一切都运行良好 - 它创建架构等,当我选择迁移数据时,我得到它停留在Migrating myTable > myTable with 0 of 159216578 rows processed - 它保持这种状态大约 1-2 小时然后崩溃并说它无法创建错误文件。
我可以更改任何东西/设置来完成这项工作吗?
有没有更好的方法(如果我也可以这样做,我可以访问.frm、.MYD、.MYI 文件)-只要我迁移这些表,我就可以接受任何事情。
谢谢!!
【问题讨论】:
-
您使用的是什么版本的 SSMA? MySQL、SQL Server 和运行 SSMA 的位置之间的网络是如何安排的?我这周刚刚迁移了一个有 510 万行的 MySQL 表,效果很好。
-
您是否使用默认设置,即批量大小 = 1000?我找不到任何关于表大小应该有限制的参考资料,但您的计算机似乎在迁移过程中试图下载太多数据(因此卡在
0然后崩溃)。运行 SSMA 的机器有多少 RAM?这张表单行有多少数据,即有很多宽列或二元列,还是架构相对轻量和简单? -
如果 SSMA 已经生成了架构,您可以尝试使用
OpenQuery通过 ODBC 连接直接从 SQL Server 复制数据到 MySQL,如下所示:blog.jamesrossiter.co.uk/2011/03/07/…。挑战在于您必须自己处理从 MySQL 到 SQL Server 的任何数据转换问题。我想您可以尝试将源表拆分为205 百万行表。你的表有自然分区键吗?磁盘上的表有多大? -
OpenQuery的一种可能性是,您可以在技术上包含WHERE以限制遇到的行数。例如,INSERT SQLServerdatabasename.dbo.tablename SELECT * FROM openquery(MYSQL, ‘SELECT * FROM databasename.tablename WHERE PK BETWEEN 1 AND 1000000’)之类的东西可以获取前 1,000,000 个 id 值。然后只需更新最小/最大值并运行,直到您一直通过表格(或使用FOR循环来获取所需的所有数百万)。 -
...虽然我强烈建议用一个小集合进行测试,比如 100 行,并检查一切是否正常。例如,除非您
set identity [TableName] off,否则 PK 值不会直接过来。并且您可能会在必须处理的某些栏目中发现翻译问题。
标签: mysql sql-server database database-migration