4

我记得在我以前的工作中,我需要进行数据迁移。在那种情况下,我需要迁移到一个新系统,我要开发,所以它有不同的表模式。我想第一,我应该知道:

  • 通常,数据如何(使用相同的模式)迁移到不同的数据库引擎。例如。MySQL -> MSSQL。就我而言,我的目标数据库是 MySQL,我使用了 MySQL Migration Toolkit

  • 我在想,在企业应用程序中,可能有存储过程、触发器也需要导入。

  • 如果表模式不同,那么我将如何去做呢?在我的上一份工作中,我所做的是将数据(在我的情况下,从 Access)导入到我的目标(MySQL)中,留下表结构。然后使用 SQL 选择数据并根据需要操作到最终目标表中。

  • 在我的情况下,我没有旧数据库的文档,并且列的命名不正确,例如。它使用“field1”、“field2”等。我需要从应用程序代码中追踪这些列的含义。有更好的方法吗?或者有时,列在分隔数据中包含多个值,阅读代码是唯一的方法吗?

4

4 回答 4

4

我真的取决于,但从你的问题我假设你想听听其他人做什么。所以这就是我在当前项目中所做的。

我必须从 Oracle 迁移到 Oracle,但要迁移到完全不同的架构。旧系统是 2 层(旧客户端、旧数据库)新系统是 3 层(新客户端、业务逻辑、新数据库)。我们在新模式中有 600 多个表。

经过深思熟虑,我们放弃了在 SQL 中从旧数据库迁移到新数据库的想法。我们决定在我们的情况下,我会更容易去:

old database -> old client -> business logic -> new database

在旧数据库中,许多数据以奇怪的方式存储,而旧客户端以复杂的方式对其进行了破坏。我们可以访问旧客户端的源代码,但它是一个非常大的系统。

我们编写了一个位于旧客户端和业务逻辑之上的迁移工具。我们之前有一些 SQL,之后有一些 SQL,但是大部分数据是通过旧客户端和业务逻辑迁移的。

缺点是它很慢,在我们的例子中,一个完整的迁移需要 190 多个小时,但除此之外它运行良好。

更新

就存储过程和触发器而言:即使我们在新旧系统(都是 Oracle)中使用相同的 DBMS,过程和触发器也是从头开始为新系统编写的。

于 2009-09-27T04:03:53.800 回答
3

当我执行数据库迁移时,我使用应用程序而不是通用工具来迁移数据库。该应用程序连接到两个数据库并将对象从一个数据库复制到另一个数据库。您不必担心架构或权限或诸如此类的事情,因为所有这些都在应用程序中处理,就像您首先设置应用程序时发生的事情一样。

当然,如果您的应用程序不支持这一点,这可能对您没有帮助。但是,如果您正在编写应用程序,我强烈建议您这样做。

于 2009-09-27T04:00:47.480 回答
1

我推荐维基百科文章以获得一个很好的概述和主要商业工具(和一些非商业工具)的链接。存储过程(和亲属,例如用户定义的函数),如果丰富,将成为迁移中的“热点”,需要稀有的 abd 昂贵的人类技能——一旦你摆脱了“声明性”的情绪主流 SQL 和过程代码,你不能指望自动化工具做一个像样的工作(图灵定理说他们实际上不能,在一个足够普遍的情况下;-)。因此,您需要对两种引擎的程序陷阱有充分了解的工程师——您要从中迁移的引擎,以及您要迁移到的引擎。你可以买它——这是顾问赚大钱的利基之一!-)

于 2009-09-27T03:53:55.460 回答
0

如果您使用的是 MS SQL Server,则可以使用 SSMS 一次性编写架构所有数据的脚本:SQL Server 2008: Script Data as Inserts

如果您不使用任何/许多非标准 SQL 结构,那么您可以手动编辑此 scipt 而无需太多努力。

于 2009-09-27T03:46:55.417 回答