将数据和/或架构从 DBv1 迁移到 DBv2

Nat*_*ate 4 sql-server migration ssms

我有一个生产数据库,它已经被关闭了几个月。我一直在对测试/开发服务器上的重复副本进行修改。我已经向几个表添加了一些额外的字段(允许为空),并且我已经向新表和现有表添加了一些新表和索引。

我的问题是:我已准备好使用我的测试/开发数据库并将其投入生产。问题是我需要将所有数据从我的生产数据库迁移到我的测试/开发数据库。我的第一个想法是使用 SSMS 将数据从生产“导入”到测试/开发,我遇到的问题是即使使用“启用身份插入”,我仍然会遇到所有类型的外键约束错误。这有点像两部分

  1. 有没有比我刚刚概述的过程更好的方法将架构更改从测试/开发迁移到生产?
  2. 如果没有,有没有办法在导入过程中暂时禁用所有插入约束?

我很乐意只将我的测试/开发模式迁移到我的生产服务器,但我还没有找到任何方法来做到这一点,而无需手动逐表、逐索引、逐视图、逐存储过程的存储过程。 . 等我已经看到一些声称能够做到这一点的工具,但我正在寻找一个免费/开源的解决方案并且没有找到任何东西。

注意:数据库很小 < 10gb,测试/开发数据库被完全截断,每个表中的记录为零。

Mar*_*ith 5

听起来你已经把它完全颠倒过来了。通常使用脚本跟踪更改,然后将其应用到生产数据库。我从未遇到过将生产数据导入到开发创建的下一个版本有意义的情况。

如果您的数据库当前不在源代码控制中,那么从 Jeff Atwood 的文章Get Your Database Under Version Control中链接的文章是一个很好的介绍。此外,免费的 Redgate 电子书SQL Server Team Based Development包括一章关于数据库源控制的章节。

如果您一直在通过 GUI 工具进行更改并且没有任何更改记录,那么您最好的选择是使用数据库比较工具,例如Redgate SQLCompareApex SQLDiff。这些工具将生成脚本来升级您的生产数据库以匹配开发模式。

如果老板不愿意花钱购买比较工具,您可以使用WinMergeDiffMerge等差异工具手动协调更改。使用 SSMS生成脚本工具将对象脚本化到单个文件,然后使用差异工具识别差异。最后,为表的任何更改手工制作必要的 ALTER 语句。