假设我的网站和我的计算机本地托管的网站数据库(用于开发)和托管的另一个数据库(用于生产)...即首先我在dev db上进行更改然后我进行更改对prod DB。
将我在本地数据库上所做的更改传输到托管数据库的最佳方法是什么?
如果重要,我正在使用MS Sql Server(2008)
答案 0 :(得分:3)
使用Visual Studio和SQL Server执行此操作的正确方法是向Web应用程序解决方案添加数据库项目。数据库项目应具有SQL文件,可以在新服务器上完全重新创建整个数据库以及所有必需的表,过程用户和角色。
这样,它们也包含在所有其余代码的源代码控制中。
数据库项目中有一个更改子文件夹,我在其中放置了对后续版本的数据库应用任何新的更改或添加的SQL文件。
文件中的SQL应该使用正确的“if exist”块编写,以便可以在已更新的数据库上多次安全地运行而不会出错。
通常,您不应直接在数据库中进行更改 - 而是修改项目中的SQL脚本并将其应用于数据库,以确保源代码(SQL文件)始终是最新的。 / p>
答案 1 :(得分:1)
我们通过编写“迁移”在(Ruby on)Rails世界中这样做,它捕获您在每个点对数据库结构所做的更改。这些是使用迁移工具(rake的任务)运行的,它还会写入数据库表,以便知道是否已运行特定的迁移。
你可以为你的开发平台(.Net?)制作这样的结构,但我认为在这个问题的其他答案中,人们会建议在开发平台或者特定数据库中处理数据库版本控制的可用工具。
我不知道其中任何一个,but check out this list。我看到很多付出的东西,但必须有一些免费的东西。还check this out。
答案 2 :(得分:1)
我通过开发人员在测试/验证其更改时编写的更改脚本来迁移更改。 (移动大数据的例外情况。)所有脚本都存储在Source控制系统中。并且可以由DBA验证。
这是手动的,有时是耗时但有效,安全和控制的过程。
数据库对于从dev复制来说太重要了。
有一些工具可以帮助创建/验证这些脚本。 见http://www.red-gate.com/ 我使用他们的工具来比较2个数据库来创建脚本。 布赖恩
答案 3 :(得分:1)
如果变化很小,我有时会手工制作。对于较大的更改,我使用Red Gate的SQL Compare生成更改脚本。这些是经过手工验证并首先在QA环境中运行,以确保它们不会破坏任何内容。对于大的更改,我们会在质量保证和生产中进行更改之前运行特殊备份。
答案 4 :(得分:0)
我们曾经使用Ron提供的方法。对于拥有专门的DBA团队的大型项目来说,它是有意义的。但是,如果您没有专门为DB编写代码的开发人员,那么方法的时间和资源都很昂贵。
使用RedGate DB比较的方法也不好。 你仍然需要做很多手工工作,你可以跳过一些错误的步骤。
它需要更好的东西。这就是我们构建"Agile DB Recreation/Import/Reverse/Export tool"的原因 该工具是免费的。
优点:您的开发人员使用任何首选工具来开发DEV DB。然后他们运行DB RIRE并使它反向生成DB(表,视图,存储过程等)并将数据导出到XML文件中。您可以在任何代码存储库系统中保存的XML文件。
第二步是再次运行DB RIRE,在XML文件和Production DB中生成结构和数据之间的差异脚本。
当然,您可以根据需要进行尽可能多的迭代。