数据库构建过程管理

时间:2012-04-10 20:53:39

标签: mysql sql-server database oracle database-design

有哪些选项可用于管理数据库脚本并为数据库执行新的开发:

例如,许多应用程序使用的数据库以及许多使用数据库的开发人员,最新的选项是使数据库保持最新的最新更改以及部署更改的过程应该是什么生产

我看到两个选项:

  1. Microsoft visual studio有一个数据库项目,所以所有的数据库 应该在项目中添加脚本,并且可以重建数据库 来自visual studio
  2. 从备份还原数据库并仅将新脚本应用于数据库
  3. 还有其他选择吗?如何管理数据库开发,最佳实践是什么?我上面写的选项的优点和缺点是什么?如何维护新的sql脚本?

    我理解应该使用源代码控制系统,但是使用DB脚本并不像应用程序那么容易。

    我认为这不是通用的解决方案,但至少我对数据库开发人员的意见很有兴趣,知道它是如何在贵公司实施的。

3 个答案:

答案 0 :(得分:3)

目前我们使用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

答案 1 :(得分:3)

Liquibase是恕我直言的最佳工具。它的方法非常简单,这是它运作良好的原因之一。

您可以在网站上阅读它的工作原理,但基本上它会创建并管理一个简单的表,该表存储每个脚本的哈希值,以确定它是否已运行脚本。还有pre-sql和post-sql,你可以绕过条件......它几乎可以满足你想要或需要的一切。它还具有maven集成,因此它可以无缝地成为构建的一部分。

我在一个大型(8个开发人员)项目中非常成功地使用它,现在我不会使用任何其他东西。

它是免费的!

答案 2 :(得分:1)

我们使用DBGhost来控制数据库的版本。创建当前数据库的脚本存储在TFS中(与源代码一起),然后DBGhost用于生成增量脚本以将环境升级到当前版本。 DBGhost还可以为任何静态/引用/代码数据创建增量脚本。

它需要从传统方法转变思维,但这是一个很好的解决方案,我不能推荐。虽然它是第三方产品,但它可以无缝地融入我们的自动构建和部署过程。