SQL Server DDL代码的版本控制

6

我希望所有数据库DDL代码都在CVS下

我们使用Subversion来管理.NET代码,但所有的数据库代码仍未版本化。

我们都知道数据库逻辑的重要性。我已经搜索过,但只找到了一些(昂贵的)工具。我相信存在其他(更便宜的)解决方案。

您建议采取什么方法?哪些工具最合适?

SQL Server 2005、VS 2008 TS、TSVN

更新: 我们的编码情境是开发人员不能直接访问PROD DB。它只能通过脚本进行更改(因此这不是问题)。

我最感兴趣的是DEV环境,所有开发人员都有完全访问权限。
所以开发人员会覆盖先前由另一个开发人员更改的USP。
我希望能够恢复丢失的版本/比较USPs修订等。

更新-2
为了创建部署脚本,我们使用Red-Gate SQL Compare。
它运行得很完美-所以部署脚本不是问题。

9个回答

4
如果你还没有阅读过,Martin Fowler的文章Evolutionary Database Design是一个很好的起点。
这篇文章很难概括,但它描述了他的团队如何在快速变化的开发过程中处理数据库版本控制。他们创建了自己的工具来促进这些事情: 脚本将用户带到当前的主数据库,复制模式的任何版本,以便用户可以调试彼此的工作副本等等。
对于一个坚实的低技术解决方案,我发现将两种DDL脚本保存在源代码控制中非常有用:
  • 一个主版本,可以从头开始创建数据库对象。
  • 每个开发迭代的“版本升级”脚本。
它们在一定程度上是冗余的,但非常有用(特别是在部署方面)。

2
如果你还没有看过Visual Studio数据库版本GDR(也称为“Data Dude”),那么你一定要下载它并尝试一下:

http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&displaylang=en

除其他外,GDR将通过使每个开发人员能够维护自己的本地数据库副本、版本脚本、创建部署脚本以将数据库模式移动到新版本甚至支持数据库回滚来促进团队开发。

如果您正在使用团队系统开发人员版,则免费。请查看。


1
如果您正在使用Visual Studio Team Suite或Visual Studio Developer Edition,则有权获得Visual Studio Database Professional的副本。它旨在完全实现您所描述的功能,以及更多功能。我们使用它来管理我们的数据库模式(代码)。
兰迪

1
我们在所有数据库代码中都使用Subversion。由于除非是脚本,否则不允许任何东西进入生产环境,因此似乎没有问题让人们将所有脚本放入Subversion中。我们倾向于编写alter table脚本来更改具有现有数据的表,然后重新创建整个表结构以防需要从头开始创建新数据库(我们经常在多个服务器上具有相同的数据库结构,因为我们的某些客户非常庞大,并且不希望他们的数据意外地暴露给竞争对手,因此支付独立的服务器费用,因此可能需要再次创建整个数据库但不含数据)。对于不直接存储数据的对象,我们删除原始对象并使用创建语句重新创建它。每个项目都在存储库中拥有自己的主页,并且每个数据库也是如此,因此为了方便部署,脚本可能会出现在一个以上的位置。
但真正的关键是没有人可以在没有脚本的情况下加载到生产环境。我们不直接授予开发人员对生产环境的权限,因此他们在脚本中执行操作而不是使用SSMS并没有问题。

1

1
ScriptDB4Svn需要sql2000的scptxfr,但它不支持2005对象类型。2005年以后的版本中缺乏scptxfr,这促使我编写了自己的脚本工具。 - devio

1

我编写了SMOscript,它可以为数据库中的每个对象生成一个CREATE脚本。

使用此工具生成到被CVS覆盖的目录中,并更新您的代码库。


1

最后我发现这个工具和方法非常有用,而且很容易引入(至少在开始阶段 - 没有版本控制解决方案的情况下):

http://www.codeproject.com/KB/database/SQLScripter.aspx

你可以直接使用它。
对于最终解决方案,我倾向于使用GDR。


1
你应该使用管理工作室(SSMS)并将.sql文件放置在源代码控制下,可能将不同的模式对象分别放置在文件夹中。 希望这可以帮到你。

1
我尝试过了。但在小团队中,这需要太多的时间。因此,我们决定自动化。 - Maciej

0

看看Wizardby 是否符合您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接