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

时间:2010-02-17 16:01:15

标签: sql-server versioning

问题描述:

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

我们不能丢失数据 - 所以我们不能使用“drop table”。我们只能使用“alter table”。

我们实际的“数据库版本控制程序”是这样的:

  • 我们有一个名为[actual_version]的表,其中包含已安装的数据库模式的实际版本
  • 我们有一个名为“changes_script.sql”的文件,其中包含所有数据库更改 - 此文件存储在SVN上

当开发人员想要在SVN上提交新版本时,他需要通过添加来更改change_script.sql 一个街区:

if ([acctual_version].version < "23")) {
    --- sql script ----
updateVersionTo("23")
end if 

当我们想要升级数据库模式时,我们只需“执行”change_scripts.sql

有没有人有更好的主意?

6 个答案:

答案 0 :(得分:5)

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

如果你在Ruby工作,你可以查看“Ruby Migrations ”,这是一种在代码中进行数据库版本控制的形式化方法。 (.NET中有类似的东西,如RikMigrationsFluent Migrator,我也相信其他平台也存在类似的东西。)

正如Randy Minder所说,您也可以使用VS DB Edition来管理您的架构,尽管我认为RedGate工具的工作方式非常简单,并且不会将您绑定到特定的平台或IDE。

答案 1 :(得分:3)

我这样做very similarly,但使用数据库扩展属性而不是表来跟踪元数据版本,升级步骤在应用程序中定义,而不是单个脚本。大多数升级步骤仅为execute script Upgrade.vX.Y.sql

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

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

答案 2 :(得分:1)

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

我们使用它来管理我们的数据库模式和部署。伟大的工具。

答案 3 :(得分:1)

你描述了一个在很多开发商店中使用的过程,我很确定 - 包括在我的公司里。

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

最高端是采用整个数据库变更管理流程,例如Innovartis的DB Ghost,这不仅仅是一堆工具。但这需要你和你的开发人员彻底采用这种风格并生活和呼吸它。非常有趣,但到目前为止,我还没有设法说服我的开发者和老板:-(也许你有更多的运气?

答案 4 :(得分:0)

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

  1. .NET Migrator
  2. FluentMigrator
  3. Entity Framework Code First Migrations
  4. 这些工具允许您使用数据库版本。

答案 5 :(得分:0)

你看过Liquibase了吗? http://www.liquibase.org/它通过支持回滚和前滚来管理版本控制