从MySQL迁移到任意符合标准的SQL2003服务器
是否有mysqldump或者类似的工具会产生一段SQL2003代码,以便在任意兼容SQL2003的RDBMS中创建和填充相同的数据库?
(我现在正在尝试的是MonetDB)
解决方案
回答
从SQL Server 2000或者2005,我们可以让它为对象生成脚本,但是我不确定它们将如何良好地传输到其他RDBMS。
回答
生成脚本选项可能是最简单的方法。毫无疑问,我们将不得不对几种数据类型进行一些搜索/替换。
回答
这是一个艰难的过程。除非我们有一个非常简单的具有香草类型(varchar,integer等)的数据库结构,否则编写迁移工具可能会获得最佳结果。在像Perl这样的语言(通过DBI)中,这很简单。该程序基本上是一个回声循环,它从一个数据库读取并插入另一个数据库。 Google提供了这类代码的示例。
除了移动数据这一明显问题之外,还有一些更细微的问题是如何表示某些数据类型。例如,MS SQL的datetime字段与MySQL的格式不同。其他数据类型(例如BLOB)在一个RDBM中的容量可能与在另一种RDBM中的容量不同。在移植之前,我们应该确保非常了解目标数据库系统的数据类型定义。
当然,最后一个问题是使应用程序级SQL语句在新系统上运行。在我的工作中,这是迄今为止最难的部分。日期数学似乎尤其是特定于DB的,而诸如引用规则之类的令人讨厌的事情却经常引起人们的困扰。
祝项目好运。
回答
DDL语句本质上是特定于数据库供应商的。尽管它们具有相同的基本结构,但是每个供应商在定义类型,索引,约束等方面都有自己的看法。
另一方面,DML语句是相当可移植的。因此,我建议:
- 转储没有任何数据的数据库(mysqldump --no-data)以获取架构
- 进行必要的更改以将模式加载到另一个DB上-这些操作需要手动完成(但可以进行一些搜索/替换)
- 在没有扩展插入且没有创建表的情况下转储数据(--extended-insert = 0 --no-create-info)
- 针对另一个数据库运行结果脚本。
这应该做我们想要的。
但是,将应用程序移植到其他数据库供应商时,将需要执行许多其他操作。移动模式和数据很容易。要检查引入的错误,很难进行不同的行为和性能测试。
至少要测试应用程序中的每个查询在新数据库上的有效性。理想情况下,可以做更多的事情。