将最新更改部署到生产数据库 - 不会丢失数据

时间:2012-01-12 15:30:07

标签: sql-server sql-server-2008 ssms

在使用开发和实时生产数据库时,我一直在研究正确的程序。我找到的最好的文章就是这个:Strategies for Database Development and Deployment,但我无法接受这样的想法,即我必须手动维护我对数据库所做的每一项更改。这对我来说似乎很荒谬......

我使用 SQL Server Management Studio 在dev和prod中管理我的SQL数据库。有没有办法在不破坏表和数据的情况下将最新的更改部署到生产中。有人可以请我指出一篇关于如何在SSMS中完成这项工作的好文章。

谢谢

3 个答案:

答案 0 :(得分:3)

在不创建放入源代码管理的更改脚本的情况下更改数据库设计是不负责任的。

但是,如果你已经处于这种状态,我建议购买red_gate的SQLCompare。它将查看两个数据库并编写不同的脚本。尽管如此,你仍然无法运行这个 - 有时你已经对dev数据库进行了更改,这些数据库还没有被推送到prod的版本,而SQLCompare无法知道这一点。最好随时创建脚本(当表存在时使用alter table以便不破坏现有数据)并使用您将同时推送的其余代码将它们保存在源代码控制中。

答案 1 :(得分:1)

在生产中执行此操作的唯一正确方法 - 使用或不使用 Management Studio - 手动准备,检查,测试和运行脚本。 WITH FRESH BACKUP!

答案 2 :(得分:1)

一种常见的策略是保留一组有序的更改脚本,例如:以日期或数据库版本为前缀,可以从生产中的新备份开始,在开发数据库上轻松测试。更改脚本通常可以在进行更改时从SQL Server Management Studio生成,也可以在更复杂的更改时手动制作。

另一个建议是版本控制数据库定义(表,程序等)。通过使用SQL Server Management Studio在每次更新后为所有对象生成创建脚本,可以轻松实现这一点。通过这种方式,您可以轻松地比较随时间或不同环境之间所做的更改。