如何更新我的SQL Server数据库架构?

14

通常在项目开发过程中,我会频繁部署应用程序,以确保在生产环境中不会出现任何问题。

此外,在开发过程中,我发现自己需要更改数据库的模式。

如何轻松地更新生产环境中的数据库?

我一直在删除旧的数据库并重新附加新的数据库。有没有更快的方法来更新部署的数据库?

谢谢

编辑

有哪些免费工具可以实现这一点?

9个回答

12

在部署时,需要维护一个包含所有应用于开发数据库的变更脚本列表,并将这些脚本应用于生产数据库。

或者,可以使用第三方工具来比较两个模式并提供一个变更脚本,然后运行该脚本。


1
+1 维护一个变更脚本集合是最好的方式。在开发环境中创建它们,部署到测试环境以确保它们按预期工作,然后再部署到生产环境。虽然你可以使用 SQL 比较工具,但我认为最好随时编写自己的变更脚本。如果你坚持使用 GUI(管理工具),则有一种选项可以在保存更改时自动生成变更脚本。 - DCNYAM
1
@RobinDay 你是如何维护一个变更脚本列表的呢?我通常使用GUI而不是脚本来更改我的数据库。 - volume one

8

我尝试使用类似RedGate SQL Compare的工具,它会显示两个版本之间的差异,并实际脚本化不同的组件。您也可以养成习惯脚本化所有数据库修订,这样您就有一个更改的审计追踪,并且可以在准备部署时以编程方式应用它们。


+1 很好的答案。这甚至没有在我的脑海中出现过。优秀的产品。 - kemiller2002
1
喜欢 RedGate 的比较功能,虽然也有其他应用程序。不过,需要考虑的最大问题是依赖关系的顺序,RedGate 除了手动之外不能帮助你找出来。 - Christopher Klein
Red Gate的SQL Compare将按依赖顺序对脚本进行排序,否则就是一个错误!在SQL Compare 9.5中,现在有一个新的“迁移”功能,可以让您自定义工具的默认行为。http://www.red-gate.com/MessageBoard/viewtopic.php?t=14113 - David Atkinson

2
你最好的选择是将更改实现为一组差异脚本。因此,不要删除表格并重新创建它,而是将你的脚本作为ALTER TABLE。此外,也有一些工具可以帮助你做到这一点。如果你保留原始数据库和新数据库的副本,可以运行一个工具来比较两者,并生成SQL语句,以便你从一个版本转移到另一个版本。

1

试试DBSourceTools。
http://dbsourcetools.codeplex.com
它是开源的,能将整个数据库-表、视图、存储过程和数据-脚本到磁盘,并允许您通过部署目标重新创建该数据库。
它专门设计用于帮助开发人员将其数据库纳入源代码控制下。


1

我个人喜欢保持完整的创建脚本更新,以及维护升级脚本,每当我为特定版本更改模式时。我曾经使用过Red Gate SQL Compare,它是一个非常好的工具,但我更喜欢保持脚本的维护。


1

始终编写脚本以进行模式更改。将脚本放置在推广文件夹中,以便在推广更改时执行脚本以更改每个环境。


0

生成脚本向导完全满足了我的需求。


1
你能详细说明一下吗?你能计算出两个相似但不同的数据库之间的差异吗? - Hamish Grubijan
抱歉,这篇文章发布已经多年了,所以我无法详细说明。当时我还是个新手,对此提问有些幼稚。我曾成功地使用过RedGate工具,但最近我非常喜欢Chuck Norris框架中的RoundHouse。 - Ronnie Overby

0

Migrator Dot Net 是一个非常棒的工具,可以对您的数据库进行版本控制。一旦使用了迁移,手动跟踪脚本和执行数据库比较就会变得困难。


0

Visual Studio 数据库版 非常擅长这方面。它将整个模式保存在源脚本中,并与其余代码一起进行源控制。当您进行更改时,它可以分析模式的依赖关系。它可以运行最佳实践分析。它还可以生成一个 .dbschema 文件,该文件可由部署工具用于将数据库升级到当前模式。

您实际上可以通过持续集成和构建直接将其自动化到测试环境、暂存环境甚至生产环境。这意味着当您检入测试分支时,构建机器将构建产品,运行构建验证测试并将其部署在开发服务器上。当您从测试分支反向集成到主分支时,构建机器会构建产品,运行 BVT 并将其部署在您的暂存测试/验收服务器上。当您集成到发布分支时,构建机器将构建、测试并最终在生产环境中部署。现在确实如此,不多的组织准备走得那么远,并让持续构建过程自动部署到实时生产服务器上,我认为这是有点激进的想法。但我认为您应该更信任您的自动化 BVT 和自动化流程,而不是任何手动测试和部署。


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