我有一个经历迭代的数据库项目(目前只有一个),我需要将测试版本部署到实时服务器。我不知道该怎么做。
我可以在副本中进行所有更改,然后在实时版本中重新制作这些更改。这没有意义。
有没有办法将服务器名称更改为现有服务器?这种情况的最佳做法是什么?
答案 0 :(得分:1)
使用Visual Studio数据库项目,您应该能够根据需要定义任意数量的数据库连接。当您运行脚本时,您可以选择一个名为“Run On ....”的菜单选项,然后选择运行这些脚本的服务器连接。
alt text http://i49.tinypic.com/10pzp8m.png
只要确保两个实例的数据库名称相同,或者确保在所有脚本的顶部没有指定USE (database)
,如果数据库名称与目标不同。
答案 1 :(得分:0)
首先,您应该已经为您所做的更改编写了脚本。他们应该在源头控制。没有脚本和版本控制,不应对数据库结构进行任何更改。
由于您似乎没有应该部署的内容,因此您需要使用工具来检查数据库之间的差异。 Redgate的SQL Compare是要买的。
小心使用该工具而不考虑,可能会有一些变化,你尚未准备好推广产品。在运行之前先阅读脚本。
此外,您可能需要SQL数据比较来运行任何查找表,您必须查看是否已在dev中添加了需要转到prod的新值。同样,这些插入应该已经编写脚本并在源代码控制中,然后部署很简单。
答案 2 :(得分:-1)
也许我误解了这个问题,但我不知道你怎么可以交换数据库。如果您创建数据库的开发版本并更新架构,则必须运行某些测试并更新数据。你不能现在就把它当成开发数据库,因为它充满了测试数据。
您需要做的是运行一个工具,将旧架构与新架构进行比较,然后将这些更改应用于生产数据库。市场上有工具可以做到这一点。如果做不到这一点,您可以转储旧的和新的模式,通过普通文件运行它们比较以获得差异,然后构建更新脚本。
在我目前的项目中,我们使用了我认为糟糕的做法:我们为每个版本保留一个手工维护的架构更新脚本,每当有人进行更改时,他们都应该更新此脚本。时不时有人犯了错误,我们不得不争先恐后地弄清楚出了什么问题。就像我们在部署到用户验收测试时遇到了一个问题,因为有人更新了新表的create语句,以便将外键包含到另一个新表中......没有意识到正在引用的表是在脚本中进一步向下创建的。它工作得很好,因为这些表是按顺序创建的。
我的结论是,您最好只是动态更改架构,然后在完成后,运行自动比较以生成ALTER语句。
顺便说一句,在我几年前工作的一个项目中,对于一个桌面应用程序,每个客户都有自己的数据库副本,我们提出了一个非常好的功能:每次程序启动up,它将数据库的模式与它认为应该是的模式进行了比较,如果它们不匹配,它会自动更新它。因此,当他们安装新版本时,它只是在第一次运行时自动更新数据库。