问题描述:
在我们的项目中,我们有一个“生产数据库”和许多“开发者”。我们想知道如何管理和安装更改。我们已经有了一些程序,但需要花费很多时间,有时会导致错误。
我们不能丢失数据 - 所以我们不能使用“drop table”。我们只能使用“alter table”。
我们实际的“数据库版本控制程序”是这样的:
当开发人员想要在SVN上提交新版本时,他需要通过添加来更改change_script.sql 一个街区:
if ([acctual_version].version < "23")) {
--- sql script ----
updateVersionTo("23")
end if
当我们想要升级数据库模式时,我们只需“执行”change_scripts.sql
有没有人有更好的主意?
答案 0 :(得分:5)
Red Gate的 Sql Compare 工具可以比较两个表(或两个DDL脚本集合,或一组脚本到表等)并为您生成迁移脚本。
如果你在Ruby工作,你可以查看“Ruby Migrations ”,这是一种在代码中进行数据库版本控制的形式化方法。 (.NET中有类似的东西,如RikMigrations和Fluent Migrator,我也相信其他平台也存在类似的东西。)
正如Randy Minder所说,您也可以使用VS DB Edition来管理您的架构,尽管我认为RedGate工具的工作方式非常简单,并且不会将您绑定到特定的平台或IDE。
答案 1 :(得分:3)
我这样做very similarly,但使用数据库扩展属性而不是表来跟踪元数据版本,升级步骤在应用程序中定义,而不是单个脚本。大多数升级步骤仅为execute script Upgrade.vX.Y.sql
。
我实际上发现你的方法优于模式比较工具(包括VS数据库部署),原因如下:
答案 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)
您可以使用数据库迁移器工具,例如:
这些工具允许您使用数据库版本。
答案 5 :(得分:0)