我一直在考虑如何改进对数据库结构的管理变更。我有一个构建服务器来创建夜间构建,因此我认为我们可以在测试环境中以某种方式创建数据库转储,备份和脚本,作为构建过程的一部分。然后,当将更新部署到客户端时,我们可以使用DBDiff之类的工具来创建数据库更新脚本。
有人在做类似的事吗?这甚至是个好主意吗?也许一些很好的提示在构建服务器上使用什么来创建这些转储?
答案 0 :(得分:2)
我建议保留一个从头开始创建数据库的正确脚本,而不是识别差异。
我们非常满意使用Liquibase来管理项目中的所有数据库迁移。它知道应用了哪些“补丁”,并确保只有那些缺失的补丁将应用于目标数据库。
答案 1 :(得分:0)
这是可能的。
差异是困难的部分。一旦确定了差异,就需要构造适当的sql,然后应用它。您可以直接应用它,也可以创建一些可以在审核后运行的脚本。
当双方都改变时,你需要决定目标系统是否应该保持其变化,或者是否应该完全删除。
请记住,当目标系统更改时也包含数据,并且如果删除某些表或列,则可能会完全破坏您的参照完整性。
还有一个想法。您需要访问目标系统才能确定差异。如果这是一个通用实用程序,您将需要在事实之后使其成为可执行文件,而不是构建的一部分。答案 2 :(得分:0)
您会发现Visual Database Tools在这里非常有用。
http://msdn.microsoft.com/en-us/library/y5a4ezk9.aspx
在Visual Studio中内置了一个架构比较(它也可以从命令行运行)。还有一个数据库项目,其中包含数据库及其包含的对象的完整脚本集。这可以与源代码一起检入源代码管理。
您可以通过单击上下文菜单来部署基于这些脚本的新数据库。
答案 3 :(得分:0)
看看http://www.codeproject.com/KB/architecture/Database_CI.aspx和http://www.martinfowler.com/articles/evodb.html - 已经有相当多的想法已经可用。
答案 4 :(得分:0)
我们目前正在查看Juneau CTP版本,Visual Studio的SQL工具。它具有快照和架构比较功能。基本上,它可以为您自动生成两个模式之间的脚本。如果对数据库的两个版本使用它,它将为您提供升级脚本。
答案 5 :(得分:0)
在Red Gate,我们即将发布一个解决方案,该解决方案使用SQL Source Control和SQL Compare解决了这个问题。我们有一个早期访问程序,允许您尝试这一点。请访问以下链接了解注册详情。
http://www.red-gate.com/MessageBoard/viewtopic.php?p=46951#46951