我需要将 MySQL 数据库中已经存在的数据转换为 SQL Server 数据库。
这里需要注意的是,旧数据库设计得很糟糕,但新数据库采用了适当的 3N 形式。有没有人对如何进行此操作有任何提示?我有 SSMS 2005。
- 我可以使用它连接到 MySQL 数据库并创建 DTS 吗?还是我需要使用 SSIS?
- 我是否需要编写 MySQL DB 脚本并更改每个语句以“插入”到 SQL Server DB 中?
有没有人经历过这个?请帮忙!!!
我需要将 MySQL 数据库中已经存在的数据转换为 SQL Server 数据库。
这里需要注意的是,旧数据库设计得很糟糕,但新数据库采用了适当的 3N 形式。有没有人对如何进行此操作有任何提示?我有 SSMS 2005。
有没有人经历过这个?请帮忙!!!
请参阅此链接。这个想法是通过 MySQL ODBC 驱动程序将您的 MySQL 数据库添加为 SQL Server 中的链接服务器。然后,您可以通过 SSMS 在 MySQL 数据库上执行您喜欢的任何操作,包括将数据复制到 SQL Server。
恭喜您在 RDBMS 世界中进步!
SSIS 就是为做这种事情而设计的。第一步是手动绘制每条数据在新结构中的位置。因此,您的旧表有四个字段,在您的新结构中,fileds1 和 2 转到表 a,字段 3 和 4 转到表 b,但您还需要从表 a 中自动生成 id。记下数据类型发生变化的地方,您可能需要进行调整,或者您需要在以前不需要数据的地方提交文件等。
我通常做的是创建临时表。将非规范化形式的数据放在一个临时表中,然后移动到规范化临时表并在那里进行清理,并在将新 ID 添加到临时表后立即添加它们。如果要从非规范化数据库迁移到规范化数据库,您需要做的一件事是,在将父表插入实际生产表之前,您需要消除父表中的重复项。您可能还需要进行数据清理,因为新结构中可能存在旧结构中不需要的文件,或者由于迁移到更好的数据类型而导致的数据转换问题(例如,如果您将日期存储在旧数据库中的 varchar 字段中,但正确移动到新数据库中的日期时间,您可能有一些没有有效日期的记录。
您需要考虑的另一个问题是如何将旧记录 ID 转换为新记录 ID。
这不是一件容易的事,但如果你花时间有条不紊地工作,它是可行的。现在不是尝试捷径的时候。
根据原始数据库设计和新数据库设计,我真的不知道“ETL”工具能让您走多远。在我的职业生涯中,我不得不进行多次数据迁移,我们通常必须设计一个特殊的实用程序,它可以使用旧数据库中的记录更新新数据库,是的,我们用所有更新/插入完成了编码将转换数据的语句。
我不知道您的数据库有多少表,但如果它们不是太多,那么您可以考虑使用 grunt root。毕竟这是一种保证有效的技术。
我已经从另一个方向完成了这项工作,并且 SSIS 工作正常,尽管我可能需要使用脚本任务来处理轻微的数据类型怪异。 SSIS 做 ETL。
如果您在 SSMS 中转到您的数据库并右键单击,则在任务下应该是“导入数据”的选项。你可以尝试使用它。它基本上只是一个为您创建 SSIS 包的向导,然后它可以自动为您运行,或者您可以保存然后根据需要进行更改。
最大的问题是您需要如何转换数据。这涉及到很多你没有包括在内的细节(而且这些细节可能太多了,你无论如何都不能包括在内)。
我确信 SSIS 可以处理您需要进行的任何转换,以将其从旧格式更改为新格式。一种替代方法是将表按原样导入到 MS SQL 中,然后使用 SQL 代码将数据转换为 3NF 表。这完全取决于您最喜欢什么。如果您走第二条路线,则可以使用我上面在 SSMS 中提到的导入过程。它甚至会为您创建目标表。只要确保你给他们一个唯一的名字,也许在他们前面加上“STG_”之类的东西。
Davud 提到了链接服务器。这绝对是您可以采用的另一种方式(并得到我的支持)。就个人而言,我更喜欢先将表复制到 MS SQL 中,因为链接服务器有时会出现奇怪的情况,尤其是当涉及到不同提供者之间没有映射的数据类型时。如果您必须重新运行或更正部分数据,则将表全部放在 MS SQL 中也可能会更快一些并且可以节省时间。正如我所说,链接服务器方法也可能没问题。
您需要的是一个 ETL(提取、转换、加载)工具。