如何为新构建和迁移管理sqlserver数据库项目?

时间:2010-04-20 13:51:00

标签: sql-server sql-server-2005 deployment database-deployment

如何为visual studio项目管理sql server数据库构建/部署/迁移?

我们的产品包含一个合理的数据库部分(约100个表,~500个procs / functions / views),因此我们需要能够部署当前版本的新数据库以及将旧数据库升级到当前版本。目前,我们维护用于创建新数据库和版本之间迁移的单独脚本。显然不理想,但是其他人怎么处理这个?

这对我们来说很复杂,因为我们拥有许多客户,每个客户都有自己的数据库实例,而不是说我们自己的网络服务器上只有dev / test / live实例,但是围绕其他人管理dev / test / live的流程必须相似。

更新:我不想使用任何像RedGate这样的专有产品(尽管我一直听说它们非常好,并会将其作为解决方案)。

3 个答案:

答案 0 :(得分:2)

我们使用Red-Gate SQLCompare和SQLDataCompare来处理这个问题。这个想法很简单。两种比较产品都允许您将所选表(例如配置表)中的模式或数据的完整映像维护为脚本。然后,您可以将任何数据库与脚本进行比较并获取更改脚本。我们将脚本保存在Mercurial源代码控制和每个版本的标签(标签)中。然后支持可以获取任何版本的脚本,并使用Redgate工具从头开始创建或升级。

Redgate还有一个API产品,允许您从代码中执行比较功能。例如,这将允许您在安装程序或产品本身中具有自动升级功能。我们经常将此用于托管的Web应用程序,因为它允许我们更全面地自动化部署过程。在我们的示例中,我们有一个MSBuild任务,支持可以执行以执行自动部署和升级。如果您分发给第三方,则必须为包含API的每个分发支付少量额外许可费。

Redgate还有一个自动打包数据库安装或升级的工具。我们没有使用那个,因为我们发现与版本脚本的比较为我们提供了更大的灵活性。

Redgate工具还可以帮助我们进行开发,因为它们使得以非常精细的方式控制架构和配置数据变得微不足道(每个数据库对象都可以放在自己的文件中)

答案 1 :(得分:1)

问题是在SSDT项目出现之前提出的,但这绝对是我现在的方式,以及用于结构数据库更改的手工制作迁移脚本,其中有数据会受到影响。

答案 2 :(得分:0)

还有MS VSTS方法(2008年描述here),任何人都有一篇关于2010年这样做的好文章以及使用这些工具的优缺点?