2

是否有 mysqldump 或类似工具的咒语会产生一段 SQL2003 代码来在任意符合 SQL2003 的 RDBMS 中创建和填充相同的数据库?

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

4

4 回答 4

3

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

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

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

这应该做你想要的。

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

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

于 2008-09-18T09:10:26.547 回答
1

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

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

当然,最后一个问题是让应用程序级别的 SQL 语句在新系统上运行。在我的工作中,这是迄今为止最困难的部分。日期数学似乎特别针对 DB,而诸如引用规则之类的烦人的事情一直是令人烦恼的根源。

祝你的项目好运。

于 2008-09-17T17:58:08.797 回答
0

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

于 2008-09-17T17:46:03.023 回答
0

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

于 2008-09-17T17:50:49.283 回答