从MySQL迁移到任意符合标准的SQL2003服务器

时间:2008-09-17 17:16:52

标签: sql mysql mysqldump

是否有一个mysqldump或类似工具的咒语将生成一个SQL2003代码来创建和填充任意SQL2003兼容的RDBMS中的相同数据库?

(我现在正在尝试的是MonetDB)

4 个答案:

答案 0 :(得分:3)

DDL语句本质上是数据库供应商特定的。虽然它们具有相同的基本结构,但每个供应商都有自己对如何定义类型,索引,约束等的看法。

另一方面,

DML语句相当便携。因此我建议:

  • 转储数据库时没有任何数据(mysqldump --no-data)来获取架构
  • 进行必要的更改以在其他数据库上加载架构 - 这些需要手动完成(但可能会进行一些搜索/替换)
  • 关闭扩展插入的数据转储,没有创建表(--extended-insert = 0 --no-create-info)
  • 针对其他数据库运行生成的脚本。

这应该做你想要的。

但是,在将应用程序移植到其他数据库供应商时,还需要许多其他内容;移动架构和数据很容易。检查引入的错误,不同的行为和性能测试是很难的。

至少测试应用程序中的每个查询对新数据库的有效性。理想情况下做得更多。

答案 1 :(得分:1)

这个很难。除非你有一个非常简单的带有vanilla类型的数据库结构(varchar,integer等),否则你可能会在编写迁移工具时获得最佳结果。在像Perl这样的语言中(通过DBI),这非常简单。该程序基本上是一个echo循环,从一个数据库读取并插入另一个数据库。谷歌知道这类代码的例子。

除了移动数据的明显问题之外,还有一个更细微的问题,即如何表示某些数据类型。例如,MS SQL的datetime字段与MySQL的格式不同。其他数据类型(如BLOB)在一个RDBM中的容量可能与另一个RDBM中的容量不同。您应该确保在移植之前很好地理解目标数据库系统的数据类型定义。

当然,最后一个问题是让应用程序级SQL语句对新系统起作用。在我的工作中,这是迄今为止最困难的部分。日期数学似乎特别针对特定数据库,而引用规则之类的令人讨厌的事情则是一个不断激怒的来源。

祝你的项目好运。

答案 2 :(得分:0)

从SQL Server 2000或2005可以让它为您的对象生成脚本,但我不确定它们将如何转移到其他RDBMS。

答案 3 :(得分:0)

生成脚本选项可能是最简单的方法。毫无疑问,您必须对一些数据类型进行一些搜索/替换。