建库流程管理
Posted
技术标签:
【中文标题】建库流程管理【英文标题】:Database build process management 【发布时间】:2012-04-23 04:33:14 【问题描述】:有哪些选项可以管理数据库脚本并为数据库进行新开发:
例如,许多应用程序使用的数据库,并且有许多开发人员使用数据库,最好的选择是保持数据库与最后一次更改保持同步,以及部署更改的过程应该是什么投入生产
我看到两个选项:
-
Microsoft Visual Studio 有一个数据库项目,所以所有数据库
应该在项目中添加脚本并且可以重建数据库
来自视觉工作室
从备份中恢复数据库并仅将新脚本应用于数据库
还有哪些选择?我如何管理数据库开发,最佳实践是什么?我上面写的选项有什么优点和缺点?如何维护新的sql脚本?
我知道应该使用源代码控制系统,但是使用数据库脚本并不像使用应用程序那么容易。
我相信这不会是一个通用的解决方案,但至少我对 DB 开发人员认为它是如何在贵公司实施的很感兴趣。
【问题讨论】:
【参考方案1】:目前我们使用 SVN 并有一个“UpgradeScripts”文件夹,所有开发人员都将他们的脚本提交到该文件夹。
每个脚本都有一个格式为 upg_yyyymmddhhmmss_ScriptName.sql 的生成前缀 - 因此,当它们被部署时,它们会以预定义的顺序运行;保持数据库一致。
这是通过以下 SQL 生成的,并通过预提交挂钩强制执行:
select 'upg_' + convert(varchar, SYSUTCDATETIME(), 112)
+ replace(convert(varchar, SYSUTCDATETIME(), 8), ':', '')
+ '-'
+ 'MeaningfulScriptName'
我们使用的另一个方便的技术是确保静态数据和非静态数据之间的区别是清晰的;所以在我们的数据库中有标准的“dbo”模式——它表示可能在环境之间改变的非静态数据,还有一个“静态”模式。此架构中的所有表都有静态 ID,因此开发人员知道他们可以在枚举中使用它们并在脚本中引用该 ID。
如果您正在寻找更正式的东西,Red Gate 有一个名为 SQL Source Control 的实用程序。
或者您可以考虑使用Data Tier Application framework。
【讨论】:
你刚刚重新发明了***......请参阅 Liquibase - 它为你做了所有“独特的脚本”废话等等。太棒了。【参考方案2】:我们使用DBGhost 对数据库进行版本控制。创建当前数据库的脚本(连同源代码)存储在 TFS 中,然后使用 DBGhost 生成增量脚本以将环境升级到当前版本。 DBGhost 还可以为任何静态/引用/代码数据创建增量脚本。
它需要从传统方法转变思想,但这是一个很棒的解决方案,我推荐的再多也不为过。虽然它是第 3 方产品,但它可以无缝融入我们的自动化构建和部署流程。
【讨论】:
【参考方案3】:Liquibase 是恕我直言最好的工具。它的方法非常简单,这也是它运作良好的原因之一。
您可以在网站上阅读它是如何工作的,但基本上它会创建和管理一个简单的表,该表存储每个脚本的哈希以确定它是否已运行脚本。也有 pre-和 post- sql,你可以绕过条件......它几乎可以完成你想要或需要的一切。它还具有 maven 集成,因此可以无缝地成为您构建的一部分。
我在一个大型(8 个开发人员)项目中非常成功地使用了它,现在我不会再使用其他任何东西了。
而且它是免费的!
【讨论】:
看起来很有趣,将其标记为答案...将尝试该工具以上是关于建库流程管理的主要内容,如果未能解决你的问题,请参考以下文章