Sql server 使用SQL Server部署数据库更改的简单方法是什么?

Sql server 使用SQL Server部署数据库更改的简单方法是什么?,sql-server,deployment,database-versioning,Sql Server,Deployment,Database Versioning,我工作的软件系统是一个医疗计费系统、大量数据和数据表以及存储过程 我在读文章“”,在Joel Test#2中说:你能一步完成构建吗 现在我想知道,这是否意味着部署构建(以便客户可以更新其部署) 现在我遇到的主要问题是,如何进行一步数据库更新 目前,当我们对数据库进行更改时,所有更改都会被记录并添加到数据库更新脚本中,在创建deploy to customer build时,该脚本会附带一个版本号 有没有更简单的方法?一些脚本或应用程序对数据库模式进行“之前和之后”检查,并像我提到的那样创建更新脚

我工作的软件系统是一个医疗计费系统、大量数据和数据表以及存储过程

我在读文章“”,在Joel Test#2中说:你能一步完成构建吗

现在我想知道,这是否意味着部署构建(以便客户可以更新其部署)

现在我遇到的主要问题是,如何进行一步数据库更新

目前,当我们对数据库进行更改时,所有更改都会被记录并添加到数据库更新脚本中,在创建deploy to customer build时,该脚本会附带一个版本号

有没有更简单的方法?一些脚本或应用程序对数据库模式进行“之前和之后”检查,并像我提到的那样创建更新脚本

或者这只是每个人都这么做的方式,我很难相信,但似乎有道理


自动化系统将减少错误,大大加快部署构建时间,我想知道如何做到这一点。

看看这篇博文。我在两个项目中使用了来自任何DB版本的这种类型的单一更新脚本,它工作得非常好

您可能需要稍微调整工作流以适应您的工作流和/或更新template.sql文件,但总体而言,我发现这是一种非常可靠的DB部署方法

编辑:只是想详细说明一下我是如何使用这种技术的。基本上,我所有的DB修订脚本都被放入源代码管理中。然后,作为构建框上的构建后步骤,在scripts目录上运行这个Mambo工具,将脚本滚动到事务包含的单个脚本中,以便在出现任何错误时允许回滚。然后,安装程序足够智能,可以查找针对现有数据库运行的.sql脚本

之所以这样做,是因为汇总脚本检查每个单独脚本已经针对所需数据库运行的片段。因此,只有最新的脚本才能运行。需要注意的是,一旦脚本签入源代码管理并已部署,就无法对其进行编辑,因为跟踪表已经认为该脚本已运行。对于我参与的项目来说,这很好,因为我们只需将另一个脚本添加到脚本文件夹中


希望我能很好地解释这个过程,理解它。这其实并不复杂,如果这种方法适用于您的项目,它会非常有用。

回答第一个问题“现在我想知道,这是否意味着部署构建(以便客户可以更新其部署)?”

我相信Joel Test#2不是为了部署到prod,而是为了在开发过程中持续集成


至于prod中的数据库更改,它们都应该通过脚本完成,作为事务卷展的一部分,或者在备份数据库之后完成。如果卷展栏中出现故障,您总是希望能够导航回

有些应用程序可以同步数据库,但我认为你最好还是做你正在做的事情。编写更新数据库的脚本使您能够处理错误和运行事务。这被认为是最佳实践。

redgate有一个工具来比较数据库并生成一个脚本以进行同步。我们曾经使用过它,但最近改用手动脚本,使用的过程与您描述的相同。使用具有唯一版本号的手动细粒度脚本效果良好


我们将我们的升级脚本集成到单元测试中,以便它们与代码一起作为持续集成的一部分进行测试。我认为这是“一步完成构建”的一个重要部分。

您可以经历各种复杂程度:

  • 如果您有手动创建的更新脚本,并且正在寻找一种方法来轻松地将这些脚本应用于各种服务器,请查看SSW咨询提供的。它可以很好地处理这种情况

  • 如果您更倾向于使用数据库差异方法,那么RedGate(已经提到)将成为一个很好的组合。您可以将数据库区分为新旧数据库,然后将更改应用到一个漂亮的包中——作为EXE或C#项目

  • 如果您想要一种真正的、端到端的、经过深思熟虑的方法(有一点学习曲线),请查看该方法。这是一种处理数据库开发和增量更新的完整方法/技术。它非常强大,看起来很有前途——但它有点像是一种要么全有要么全无的方法:要么你购买它并端到端地使用它,要么你不这样做


希望这有点帮助

将数据库开发为一组相互依赖的修补程序。然后使用(由我提供的)这样的工具构建用于部署的sql文件

sqlpatch将按正确的顺序对修补程序进行排序,并确保每个修补程序只执行一次,即使同一脚本运行两次


此策略可用于在ci/cd环境中部署数据库。这使得部署像推到分支机构一样简单。

微软自己在SQL 2012中作为部署和升级数据库的免费选项引入


我使用并喜欢此工具,包括用于生产部署。

(+1)回答得好。要实现这一点,您需要数据库状态的版本号、基本状态,以及对数据库对象进行更改和撤消更改的脚本。虽然rails迁移并不完美,但它可以很好地实现这一点。我使用DbGhost已有10年了,而且一直都很有效。他们提供的支持是首屈一指的。@ysrb:好吧,Visual Studio 2012/2013的内部版本似乎可以自动完成许多开箱即用的任务(如果您使用的是Visual Studio),marc_s Thank mate。我会调查的:)