2009-07-04 86 views
2

假设我有一个网站和本地托管在本地计算机上的数据库(用于开发)和另一个数据库托管(用于生产)......即首先执行更改在开发数据库,​​然后我做的更改数据库。将更改从开发数据库传输到生产数据库

将我对本地数据库所做的更改传输到托管数据库的最佳方式是什么?

如果它的事项,我使用的MS SQL Server(2008)

回答

3

使用Visual Studio和SQL Server执行此操作的正确方法是将数据库项目添加到Web应用程序解决方案中。数据库项目应该有SQL文件,可以在新的服务器上完整地重新创建整个数据库以及所有必要的表,过程用户和角色。

这样,它们也包含在所有其他代码的源代码管理中。

有一个更改数据库项目中的子文件夹,其中我将SQL文件应用于数据库的任何新的更改或添加为后续版本。

应该使用正确的“if exists”块来编写文件中的SQL,以便它可以在已更新的数据库上安全地多次运行而不会出错。

通常,您不应该直接在数据库中进行更改 - 而是修改项目中的SQL脚本并将其应用于数据库,以确保您的源代码(SQL文件)始终处于最新状态。

1

我们这样做的(红宝石上)写“迁移”,Rails的世界您对DB其捕获的变化结构在每个点上。这些工具通过迁移工具(rake任务)运行,该工具也写入数据库表,以便知道是否已经运行特定的迁移。

你可以为你的开发平台(.Net?)制作这样的结构,但我认为在其他人对这个问题的回答中,人们会建议可用的工具来处理开发平台中的数据库版本控制, D B。我不知道任何这些,but check out this list。我看到很多付费的东西,但必须有一些免费的东西。另外check this out

1

我通过开发人员在测试/验证其更改后编写的更改脚本来迁移更改。 (移动大量数据的例外情况。)所有脚本都存储在Source控制系统中。并且可以由DBA验证。

这是手册,有时耗时但有效,安全和控制过程。

数据库对于从开发中复制太重要。

有工具可以帮助创建/验证这些脚本。 请参阅http://www.red-gate.com/ 我已经使用他们的工具比较2个数据库来创建脚本。 Brian

1

如果变化很小,有时我会亲手制作它们。对于较大的更改,我使用Red Gate的SQL比较来生成更改脚本。这些都是经过手工验证的,并首先在QA环境中运行,以确保它们不会破坏任何内容。对于大的变更,我们在QA和生产中进行更改之前运行特殊备份。

0

我们曾经使用Ron提供的方法。这对于一个拥有专业DBA团队的大型项目来说是有意义的。但是,如果你没有专门的开发人员编写代码只为DB这种方法是是时间和资源昂贵

使用RedGate DB比较的方法也不好。 你还有很多手工工作可以跳过

它需要更好的东西。这就是我们建立"Agile DB Recreation/Import/Reverse/Export tool" 该工具是免费的。

优点:您的开发人员使用任何首选工具来开发DEV DB。然后,他们运行DB RIRE,并使数据库(表,视图,存储过程等)进行反向并将数据导出到XML文件中。您可以保存在任何代码存储库系统中的XML文件。

第二步是再次运行DB RIRE以在XML文件和生产数据库中生成结构和数据之间的差异脚本。

当然,您可以根据需要制作尽可能多的迭代。