管理数据库更新

时间:2011-07-29 11:57:17

标签: sql build

我一直在考虑如何改进对数据库结构的管理变更。我有一个构建服务器来创建夜间构建,因此我认为我们可以在测试环境中以某种方式创建数据库转储,备份和脚本,作为构建过程的一部分。然后,当将更新部署到客户端时,我们可以使用DBDiff之类的工具来创建数据库更新脚本。

有人在做类似的事吗?这甚至是个好主意吗?也许一些很好的提示在构建服务器上使用什么来创建这些转储?

6 个答案:

答案 0 :(得分:2)

我建议保留一个从头开始创建数据库的正确脚本,而不是识别差异。

我们非常满意使用Liquibase来管理项目中的所有数据库迁移。它知道应用了哪些“补丁”,并确保只有那些缺失的补丁将应用于目标数据库。

答案 1 :(得分:0)

这是可能的。

差异是困难的部分。一旦确定了差异,就需要构造适当的sql,然后应用它。您可以直接应用它,也可以创建一些可以在审核后运行的脚本。

当双方都改变时,你需要决定目标系统是否应该保持其变化,或者是否应该完全删除。

请记住,当目标系统更改时也包含数据,并且如果删除某些表或列,则可能会完全破坏您的参照完整性。

还有一个想法。您需要访问目标系统才能确定差异。如果这是一个通用实用程序,您将需要在事实之后使其成为可执行文件,而不是构建的一部分。

答案 2 :(得分:0)

您会发现Visual Database Tools在这里非常有用。

http://msdn.microsoft.com/en-us/library/y5a4ezk9.aspx

在Visual Studio中内置了一个架构比较(它也可以从命令行运行)。还有一个数据库项目,其中包含数据库及其包含的对象的完整脚本集。这可以与源代码一起检入源代码管理。

您可以通过单击上下文菜单来部署基于这些脚本的新数据库。

答案 3 :(得分:0)

答案 4 :(得分:0)

我们目前正在查看Juneau CTP版本,Visual Studio的SQL工具。它具有快照和架构比较功能。基本上,它可以为您自动生成两个模式之间的脚本。如果对数据库的两个版本使用它,它将为您提供升级脚本。

http://msdn.microsoft.com/en-us/data/gg427686

答案 5 :(得分:0)

在Red Gate,我们即将发布一个解决方案,该解决方案使用SQL Source Control和SQL Compare解决了这个问题。我们有一个早期访问程序,允许您尝试这一点。请访问以下链接了解注册详情。

http://www.red-gate.com/MessageBoard/viewtopic.php?p=46951#46951