2010-05-20 130 views
1

我有一个数据库项目,通过迭代(到目前为止只有一个),我需要部署一个测试版本到现场服务器。我不知道如何去做这件事。Sql服务器开发服务器和生活

我可以在副本中进行所有更改,然后在活动版本中重新制作这些更改。这没有意义。

有没有办法将服务器名称更改为现有服务器?这种情况下的最佳做法是什么?

回答

1

使用Visual Studio数据库项目,您应该可以根据需要定义尽可能多的数据库连接。当你运行你的脚本时,你可以选择一个名为“Run On ....”的菜单选项,然后选择运行这些脚本的服务器连接。

alt text http://i49.tinypic.com/10pzp8m.png

只要确保数据库名称是两个实例相同,或确保您不会在所有脚本的顶部指定USE (database),如果数据库的名称是从目标不同的目标。

+0

我正在对数据库进行更改。我可以在VS项目中更改连接。我需要知道如何部署'服务器'的开发版本。 – 2010-05-20 20:58:31

+0

@Chris:你能同时连接到两台服务器吗?在这种情况下,我衷心推荐使用Red-Gate SQL Compare和SQL Data Compare来处理数据库同步 - http://www.red-gate.com/products/sql_compare/index.htm – 2010-05-20 21:00:37

+0

我没有奢侈品的特殊工具,我只是认为有这种类型的情况的标准策略 – 2010-05-20 21:17:18

-1

也许我误解了这个问题,但我不知道如何交换数据库。如果您创建数据库的开发版本并更新模式,则必须运行一些测试并更新数据。你现在不能只是开发数据库,​​因为它里面充满了测试数据。

您需要做的是运行一个工具,将旧模式与新模式进行比较,然后将这些更改应用于生产数据库。市场上有很多工具可以做到这一点。否则,你可以转储旧的和新的模式,通过普通文件比较运行它们以获得差异,然后构建一个更新脚本。

在我现在的项目中,我们使用了我认为很糟糕的做法:我们为每个版本保留一个手动维护的模式更新脚本,每当有人做出更改时,他们都应该更新此脚本。时不时地有人犯了一个错误,我们必须争先恐后地弄清楚出了什么问题。就像我们在部署到我们的用户验收测试时遇到问题一样,因为有人更新了新表的create语句,以将外键包含到另一个新表中......没有意识到被引用的表是在脚本中进一步创建之前创建的。它工作得很好,因为表格是按照使其工作的顺序创建的。

我的结论是,你可以在动态更改模式的情况下更好,然后当你完成时,运行自动比较来生成ALTER语句。

顺便说一下,在我几年前开发的一个项目中,对于每个客户都有自己的数据库副本的桌面应用程序,我们放入了我认为是非常好的功能:每次程序启动后,它将数据库的模式与它认为应该是的模式进行了比较,如果它们不匹配,它会自动更新它。所以当他们安装一个新版本时,它会在第一次运行时自动更新数据库。

+0

'自动比较'脚本,这是如何完成的? – 2010-05-20 21:18:55

+0

您应该alwawys在脚本中执行所有数据库更改并将脚本保存在源代码管理中。然后就像其他代码一样,您可以轻松部署。依靠比较工具是一种不好的做法。 – HLGEM 2010-05-20 21:38:29

+0

@HLGEM:很明显,我不同意。如果你手动建立你的更新脚本,迟早你会犯一个错误。您将更新应用于表格,但忘记将其放入脚本中。或者你会改变一个字段的属性,因此更新原始的“创建”语句,但是你会输入错误。等比较程序应该保证给出正确的结果。如果由于历史原因想要将由比较程序生成的脚本保存在您的存档中,请冷静。仅仅因为一项技术是更多的工作并不会自动使它成为正确的方式。 – Jay 2010-05-21 13:22:18

0

首先,您应该为您所做的更改编写脚本。他们应该在源头控制。没有脚本和版本控制,不应该对数据库结构进行任何更改。

由于您似乎没有应该部署的内容,因此您需要使用工具来检查数据库之间的差异。 Redgate的SQL比较是买的。

要小心简单地使用该工具而没有想到,dev中可能会有变化,您还没有准备好促进prod。在运行之前阅读脚本。

此外,您可能需要使用SQL数据比较来针对任何查找表运行,您必须查看是否已在dev中添加了新值,需要转至产品。再次,这些插入应该已经脚本和源代码控制,然后部署很简单。

+0

我知道我会听起来很愚蠢,但是这些“脚本”和“变化”在做什么呢?我直接从'Management Studio'建立了这个工具 – 2010-05-20 21:48:12