每当您进行数据库更改时,如何将这些更改应用于团队(以及您的服务器)上的其他数据库?
目前我们正在使用一个名为changes.sql的文件,我们将所有更改放在ISO日期注释中。
有更好的方法吗?
答案 0 :(得分:2)
我们使用您的方法的扩展版本。
我们为每个版本都有一个数据库升级文件夹,其中包含作为该版本一部分的所有脚本。文件夹中有一个索引文件,其中包含指向应运行的所有脚本的伪链接。
我们有一个巡航控制作业,每晚运行以恢复当前生产数据库的副本,然后针对它运行当前版本的升级脚本(通过执行索引文件中定义的脚本)。还有一个CI作业,只要有人检查当前版本的升级文件夹中的任何内容,它就会运行。
脚本显然需要重新运行,例如,他们应该在删除或创建之前检查是否存在某些内容。
答案 1 :(得分:1)
查看http://dbmaintain.org/overview.html - 这是一个非常强大的工具来管理数据库更新。它基本上通过以正确的顺序执行几个SQL脚本来工作。它会记住哪些脚本已经执行过。如果更改了已执行的脚本,则会报告错误(在生产模式下)或清除数据库并再次执行所有脚本(在测试模式下)。还有一个很好的教程。
编辑:您还可以对sql脚本进行分组(即通过发布)。这里的一大优势是您可以对单元测试,测试环境,连续集成,近实时和生产环境使用相同的测试。
答案 2 :(得分:0)
不是我当前的工作,但过去我在Visual Studio 2010中使用了database project,然后将其发布到SVN。我们有一个SOP而不是软件自动化来推动从开发到QA,升级和生产的变化。
我与之合作的团队是小型开发人员,负责数据库设计和.NET开发。
答案 3 :(得分:0)
您还应该考虑在数据库上使用版本控制。一个例子是Liquibase。通过使用Version控件,您可以对表结构的所有更改进行注释,因此您不需要changes.sql文件。
答案 4 :(得分:0)
我们使用迁移工具(migratordotnet - 存在其他替代方法),允许您编写执行数据库命令的C#类。迁移在每次调用程序或集成测试时以及每个部署的服务器上本地运行。迁移框架会自动跟踪已应用的迁移。当然,迁移是版本控制存储库的一部分。