5

我需要将 MySQL 数据库中已经存在的数据转换为 SQL Server 数据库。

这里需要注意的是,旧数据库设计得很糟糕,但新数据库采用了适当的 3N 形式。有没有人对如何进行此操作有任何提示?我有 SSMS 2005。

  1. 我可以使用它连接到 MySQL 数据库并创建 DTS 吗?还是我需要使用 SSIS?
  2. 我是否需要编写 MySQL DB 脚本并更改每个语句以“插入”到 SQL Server DB 中?

有没有人经历过这个?请帮忙!!!

4

6 回答 6

10

请参阅此链接。这个想法是通过 MySQL ODBC 驱动程序将您的 MySQL 数据库添加为 SQL Server 中的链接服务器。然后,您可以通过 SSMS 在 MySQL 数据库上执行您喜欢的任何操作,包括将数据复制到 SQL Server。

恭喜您在 RDBMS 世界中进步!

于 2009-12-02T20:12:55.257 回答
5

SSIS 就是为做这种事情而设计的。第一步是手动绘制每条数据在新结构中的位置。因此,您的旧表有四个字段,在您的新结构中,fileds1 和 2 转到表 a,字段 3 和 4 转到表 b,但您还需要从表 a 中自动生成 id。记下数据类型发生变化的地方,您可能需要进行调整,或者您需要在以前不需要数据的地方提交文件等。

我通常做的是创建临时表。将非规范化形式的数据放在一个临时表中,然后移动到规范化临时表并在那里进行清理,并在将新 ID 添加到临时表后立即添加它们。如果要从非规范化数据库迁移到规范化数据库,您需要做的一件事是,在将父表插入实际生产表之前,您需要消除父表中的重复项。您可能还需要进行数据清理,因为新结构中可能存在旧结构中不需要的文件,或者由于迁移到更好的数据类型而导致的数据转换问题(例如,如果您将日期存储在旧数据库中的 varchar 字段中,但正确移动到新数据库中的日期时间,您可能有一些没有有效日期的记录。

您需要考虑的另一个问题是如何将旧记录 ID 转换为新记录 ID。

这不是一件容易的事,但如果你花时间有条不紊地工作,它是可行的。现在不是尝试捷径的时候。

于 2009-12-02T20:23:36.937 回答
0

根据原始数据库设计和新数据库设计,我真的不知道“ETL”工具能让您走多远。在我的职业生涯中,我不得不进行多次数据迁移,我们通常必须设计一个特殊的实用程序,它可以使用旧数据库中的记录更新新数据库,是的,我们用所有更新/插入完成了编码将转换数据的语句。

我不知道您的数据库有多少表,但如果它们不是太多,那么您可以考虑使用 grunt root。毕竟这是一种保证有效的技术。

于 2009-12-02T20:12:26.360 回答
0

我已经从另一个方向完成了这项工作,并且 SSIS 工作正常,尽管我可能需要使用脚本任务来处理轻微的数据类型怪异。 SSIS 做 ETL

于 2009-12-02T20:14:34.390 回答
0

如果您在 SSMS 中转到您的数据库并右键单击,则在任务下应该是“导入数据”的选项。你可以尝试使用它。它基本上只是一个为您创建 SSIS 包的向导,然后它可以自动为您运行,或者您可以保存然后根据需要进行更改。

最大的问题是您需要如何转换数据。这涉及到很多你没有包括在内的细节(而且这些细节可能太多了,你无论如何都不能包括在内)。

我确信 SSIS 可以处理您需要进行的任何转换,以将其从旧格式更改为新格式。一种替代方法是将表按原样导入到 MS SQL 中,然后使用 SQL 代码将数据转换为 3NF 表。这完全取决于您最喜欢什么。如果您走第二条路线,则可以使用我上面在 SSMS 中提到的导入过程。它甚至会为您创建目标表。只要确保你给他们一个唯一的名字,也许在他们前面加上“STG_”之类的东西。

Davud 提到了链接服务器。这绝对是您可以采用的另一种方式(并得到我的支持)。就个人而言,我更喜欢先将表复制到 MS SQL 中,因为链接服务器有时会出现奇怪的情况,尤其是当涉及到不同提供者之间没有映射的数据类型时。如果您必须重新运行或更正部分数据,则将表全部放在 MS SQL 中也可能会更快一些并且可以节省时间。正如我所说,链接服务器方法也可能没问题。

于 2009-12-02T20:18:38.227 回答
0

您需要的是一个 ETL(提取、转换、加载)工具。

http://en.wikipedia.org/wiki/Extract,_transform,_load#Tools

于 2009-12-02T20:10:05.560 回答