数据库迁移是如何完成的?

时间:2009-09-27 03:42:36

标签: sql database data-migration

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

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

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

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

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

4 个答案:

答案 0 :(得分:2)

当我执行数据库迁移时,我使用应用程序而不是一般工具来迁移数据库。应用程序连接到两个数据库,并将对象从一个复制到另一个。您不必担心架构或权限或其他因为应用程序中处理的所有内容,就像您首先设置应用程序时所发生的那样。

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

答案 1 :(得分:2)

我真的很依赖,但从你的问题我想你想听别人怎么做。 所以这就是我在当前项目中所做的。

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

经过多次思考后,我们抓住了从旧数据库迁移到SQL中的新数据库的想法。我们决定在我们的情况下,我会更容易去:

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

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

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

缺点是它很慢,完全迁移在我们的情况下需要超过190小时,否则它运作良好。

<强>更新

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

答案 2 :(得分:1)

我推荐wikipedia文章,以获得良好的概述,并链接到主要的商业工具(以及一些非商业工具)。存储过程(和亲属,例如用户定义的功能),如果丰富,将成为迁移中的“热点”,需要罕见的昂贵的人类技能 - 一旦你摆脱了“声明性”的情绪主流SQL,以及程序代码,你不能指望自动化工具做一个体面的工作(图灵的定理说,他们实际上不能,在一个足够的一般情况下;-)。因此,您需要工程师对BOTH引擎的程序陷阱有一个很好的理解 - 您正在迁移的那个,即您要迁移到的引擎。你可以买到它 - 这是顾问们真正赚钱的好地方之一! - )

答案 3 :(得分:0)

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

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