从源代码管理自动化数据库对象迁移
Posted
技术标签:
【中文标题】从源代码管理自动化数据库对象迁移【英文标题】:Automating DB Object Migrations from Source Control 【发布时间】:2010-09-08 08:00:00 【问题描述】:我正在寻找一些“最佳实践”,用于从源代码控制中自动部署存储过程/视图/函数/表更改。我正在使用 StarTeam 和 ANT,因此标签得到处理;我正在寻找的是你们中的一些人如何从源头自动提取这些对象 - 不一定是 StarTeam。
我希望最终得到一个可以执行、签入和标记的脚本。
我不是要求任何人写这些 - 只是一些过去已经(或没有)有效的想法或方法。
我正在努力收拾烂摊子,并希望确保我尽可能地接近“正确”。
我们将表/视图/函数等存储在 StarTeam 的单个文件中,我们的数据库是 SQL 2K5。
【问题讨论】:
【参考方案1】:我们使用来自 redgate (http://www.red-gate.com/) 的 SQL 比较。
我们有一个生产数据库,一个开发数据库,每个开发人员都有自己的数据库。
开发数据库与开发人员在签入更改时对其数据库所做的更改同步。
开发人员还签入同步脚本和 SQL Compare 生成的比较报告。
当我们部署我们的应用程序时,我们只需使用 SQL Compare 将开发数据库与生产数据库同步。
这对我们有用,因为我们的应用程序仅供内部使用。如果这不是您的方案,那么我会查看 SQL Packager(也来自 redgate)。
【讨论】:
【参考方案2】:我更喜欢将视图、过程和触发器(可以随意重新创建的对象)与表分开。对于视图、过程和触发器,只需编写一个作业来检查它们并重新创建最新的。
对于表,我更喜欢只有一行的数据库版本表。使用该表来确定尚未应用哪些新更新。然后应用每次更新并更新版本号。如果更新失败,您只需检查该更新,并且您可以重新运行,因为之前的更新不会再次发生。
【讨论】:
以上是关于从源代码管理自动化数据库对象迁移的主要内容,如果未能解决你的问题,请参考以下文章