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

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

有帮助吗?

解决方案

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

另一方面,DML 语句相当可移植。因此我建议:

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

这应该做你想做的。

然而,当将应用程序移植到不同的数据库供应商时,还需要许多其他东西;移动模式和数据是很容易的事情。检查引入的错误、不同的行为和性能测试是困难的部分。

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

其他提示

这个有点难。除非您有一个非常简单的具有普通类型(varchar、整数等)的数据库结构,否则您可能会在编写迁移工具时获得最佳结果。在像 Perl(通过 DBI)这样的语言中,这是非常简单的。该程序基本上是一个回显循环,从一个数据库读取并插入到另一个数据库中。Google 知道有此类代码的示例。

除了移动数据的明显问题之外,还有一些更微妙的问题,即某些数据类型的表示方式。例如,MS SQL 的日期时间字段与 MySQL 的格式不同。其他数据类型(例如 BLOB)在一种 RDBM 中的容量可能与另一种 RDBM 中的容量不同。在移植之前,您应该确保您非常了解目标数据库系统的数据类型定义。

当然,最后一个问题是让应用程序级 SQL 语句在新系统上运行。在我的工作中,这是迄今为止最难的部分。日期数学似乎特别特定于数据库,而像引用规则这样烦人的事情是一个持续的烦恼源。

祝你的项目好运。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top