验证数据库更改(版本控制)

Saz*_*zug 10 database sql-server version-control verify

我已经阅读了很多关于数据库版本控制重要性的帖子.但是,我找不到一个简单的解决方案,如何检查数据库是否处于应该的状态.

例如,我有一个名为"Version"的数据库(版本号存储在那里).但是开发人员可以在不更改版本号的情况下访问和编辑数据库.如果例如开发人员更新存储过程但未更新版本数据库状态与版本值不同步.

如何跟踪这些变化?我不需要跟踪更改的内容,只需要检查数据库表,视图,过程等是否与Version表中保存的数据库版本同步.

为什么我需要这个?在进行部署时,我需要检查数据库是否"正确".此外,不应跟踪所有表或其他数据库对象.是否可以不使用触发器进行检查?是否可以在没有第三方工具的情况下完成?数据库是否有校验和?

让我们说我们使用SQL Server 2005.

编辑:

我想我应该提供一些关于我们当前环境的更多信息 - 我们有一个"基线",其中包含创建基本版本所需的所有脚本(包括我们应用的数据对象和"元数据").但是,这个"基础"版本有许多安装,带有一些额外的数据库对象(附加表,视图,过程等).当我们对"基础"版本进行一些更改时,我们还必须更新一些安装(不是全部) - 那时我们必须检查"基础"是否处于正确状态.

谢谢

Pas*_*ent 6

您似乎打破了" 数据库工作的三条规则 "的第一条和第二条规则.每个开发人员使用一个数据库,并为您的模式使用单个权威来源已经有很大帮助.然后,我不确定您的数据库是否有基线,更重要的是,您正在使用更改脚本.最后,您可能会在" 视图","存储过程"和"类似"以及" 分支和合并"中找到其他一些答案.

实际上,Jeff Atwood在这篇伟大的文章中提到了所有这些链接:在版本控制下获取数据库.必须阅读恕我直言.


Dav*_*ker 5

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

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


M4N*_*M4N 1

我使用一个基于此代码项目文章的简单 VBScript 文件来为所有数据库对象生成删除/创建脚本。然后我将这些脚本置于版本控制之下。

因此,要检查数据库是否是最新的或是否有尚未纳入版本控制的更改,我这样做:

  • 从版本控制获取最新版本的删除/创建脚本(在我们的例子中是颠覆)
  • 执行要检查的数据库的SqlExtract脚本,覆盖版本控制中的脚本
  • 现在我可以使用我的 subversion 客户端 (TortoiseSVN) 检查哪些文件与版本控制下的版本不匹配
  • 现在要么更新数据库,要么将修改后的脚本置于版本控制之下