Sql server 寻找数据库版本控制的解决方案

Sql server 寻找数据库版本控制的解决方案,sql-server,versioning,Sql Server,Versioning,问题描述: 在我们的项目中,我们有一个“生产数据库”和许多“开发人员”。我们想知道如何管理和安装更改。我们已经有了一些程序,但这需要很多时间,有时会导致错误 我们不能丢失数据,所以我们不能使用“删除表”。我们只能使用“alter table” 我们实际的“db版本控制过程”如下所示: 我们有一个名为[actual_version]的表,其中包含安装的db模式的实际版本 我们有一个名为“changes\u script.sql”的文件,其中包含所有数据库更改-该文件存储在SVN上 当开发人员想

问题描述:

在我们的项目中,我们有一个“生产数据库”和许多“开发人员”。我们想知道如何管理和安装更改。我们已经有了一些程序,但这需要很多时间,有时会导致错误

我们不能丢失数据,所以我们不能使用“删除表”。我们只能使用“alter table”

我们实际的“db版本控制过程”如下所示:

  • 我们有一个名为[actual_version]的表,其中包含安装的db模式的实际版本
  • 我们有一个名为“changes\u script.sql”的文件,其中包含所有数据库更改-该文件存储在SVN上
当开发人员想要提交SVN上的新修订时,他需要通过添加 a区:

if ([acctual_version].version < "23")) {
    --- sql script ----
updateVersionTo("23")
end if 
if([实际版本].版本<“23”)){
---sql脚本----
更新到(“23”)
如果结束
当我们想要升级数据库模式时,我们只是“执行”change\u scripts.sql


有谁有更好的主意吗?

您听说过Visual Studio数据库版吗?如果您目前正在使用VS Team Suite或VS Developer Edition,您可以免费获得它。它是一种数据库架构管理工具,版本控制您的架构,允许重构、构建、代码分析和部署

我们使用它来管理我们的数据库模式和部署。这是一个很棒的工具。

Red Gate的工具可以比较两个表(或两个DDL脚本集合,或一组脚本到一个表,等等),并为您生成迁移脚本

如果您使用Ruby,您可以研究“Ruby迁移”,这是在代码中进行DB版本控制的一种形式化方法。(在.NET中有类似的东西,如和,我相信其他平台也有类似的东西)

正如Randy Minder所说,您也可以使用VS DB Edition为您管理模式,尽管我认为RedGate工具同样容易工作,并且不会将您绑定到特定的平台或IDE。

我这样做,但使用数据库扩展属性而不是表来跟踪元数据版本,升级步骤是在应用程序中定义的,而不是n单个脚本。大多数升级步骤只是执行脚本升级.vX.Y.sql

实际上,我发现您的方法优于模式比较工具(包括VS DB部署),原因如下:

  • 我不相信模式比较工具会改变非常大的表,而是有一个经过测试的脚本,专门为我的150B记录表设计
  • 架构比较不处理过时对象的删除
  • 如果在客户端站点修改了应用程序架构,则比较工具将盲目地尝试对其进行升级,但修改后的架构可能需要特殊处理:检查更改、评估影响、支付额外工作

我敢肯定,您描述了一个在许多开发商店中使用的流程,包括在我的公司中

如果你想坚持这一点,一个帮助我们的工具是,它允许你获取一大堆脚本(每个版本都有一个“changes”文件夹,文件的标签是“001_something.sql”到“999_somethingelse.sql”)并将其作为一个整体对数据库执行。您还可以通过API将其包含到您的.NET应用程序中,也可以在安装过程中从命令行启动它


最高端的做法是采用整个数据库更改管理流程,比如Innovartis,这远不止是一堆工具。但这需要你和你的开发人员彻底采用这种风格,并将其付诸实践。非常有趣,但到目前为止,我还没能说服我的开发人员和老板:-(也许您运气更好?

您可以使用数据库迁移器工具,如:


  • 这些工具允许您使用数据库版本。

    您看过Liquibase吗?它为您管理版本控制,支持回滚和前滚

    @Seth-VS database Edition不仅仅是架构比较,它是一个数据库架构管理/版本控制工具。我们使用它来控制TFS中的DB架构的版本。@Randy:我的意思是,我并不是说DB edition的功能很差。我的意思是,我使用SQL Compare和TFS来控制软件版本之间的版本控制模式更改,如果VS许可证的价格过高,或者有人没有在.NET上工作,那么使用模式比较来运行自己的系统并不难SQL Compare是一个很好的工具,可以在您当前的系统中用于生成脚本以进行版本升级。如果您认为两个数据库具有相同的模式,请下载并在两个数据库之间进行测试。如果它们相同,我将承担我的责任。感谢您的响应…我认为我们需要的一切都是我的ts好的数据库比较器工具。我想做的是选择开发数据库和生产数据库,然后单击“查找差异”按钮。接下来,我可以手动复制它来更改脚本。你有什么想法吗?我们已经测试了Red Gate的Sql Compare,但它没有真正的用处嗨!我是Red Gate的产品经理,我很想知道Sql Compare的缺点是什么。请随时联系!我的电子邮件是Red-Gate.com上的David.Atkinson