如何将开发数据库更改移动到生产数据库?

时间:2010-06-29 06:59:09

标签: sql-server database

我一直致力于一个项目,并在第一阶段完成了它。但是,这些要求最终发生了变化,我不得不在DB中添加新表并重做一些foriegn密钥引用。

我遇到的问题是,一旦我在开发数据库上完成开发,我就缺乏处理对暂存然后生产数据库进行此类更改的知识。

迁移数据库架构更改和维护数据库中的数据有哪些策略?

据我所知,这是打开Sql Server Management Studio并开始手动添加表。我知道这可能是一个不好的方法,所以在找到如何正确地做到这一点,同时意识到我可能已经开始错了。

9 个答案:

答案 0 :(得分:6)

为了维护架构更改,您可以使用ApexSQL Diff,SQL Server和SQL Azure架构比较和同步工具,并且可以使用ApexSQL Data Diff,SQL Server和SQL Azure来维护数据库中的数据。数据比较和同步工具。

希望这有帮助

免责声明:我作为支持工程师为ApexSQL工作

答案 1 :(得分:4)

你必须有一个叫做“KIT”的东西。显然,如果要维护某种源代码控制,则应在源代码管理配置工具中维护开发环境中所做更改的所有脚本。

完成您认为可以转移到下一个更高环境的所有脚本/更改后。准备工具包,将所有这些脚本放在文件夹中(理想情况下分类为过程,表,函数,引导)然后使用OSQL命令行实用程序以特定顺序创建可以在工具包中执行这些脚本的批处理文件。

为UAT / Staging / production提供单独的批处理文件,以便您只需双击批处理文件即可在相应的服务器中执行该工具包。检查OSQL选项。

这样所有环境都是同步的!

答案 2 :(得分:3)

红门SQL比较和SQL数据比较一路。自从我的公司购买它以来,它节省了我将数据库从DEV升级到TEST再到接受生产的大量时间。

您也可以将其与脚本文件夹同步,以便在源代码管理系统中轻松集成。

http://www.red-gate.com

答案 3 :(得分:2)

我通常使用类似SQL Server Publishing Wizard之类的东西来生成更改的SQL脚本。这是一种相当简单易行的方法。该工具的主要缺点是生成的将丢弃并重新创建未更改但由已更改的过程使用的表(我无法理解为什么),因此在执行脚本和删除时会涉及一些手工操作那些不需要的东西。

注意您无需下载和安装此工具;您可以从Visual Studio中启动它。右键单击Server Explorer中的连接,然后在上下文菜单中选择“Publish to Provider”。

答案 4 :(得分:1)

有一些工具可以帮助您。

如果您有Visual Studio团队版,请检查数据库项目(也称为DataDude又称为Visual Studio Team for Database Professionals)See herehere

它允许您从dev / integration数据库生成模型,然后(对于许多情况,但不是所有情况)自动创建脚本,使用您对dev / integration进行的更改来更新prod数据库。

对于VS 2008,请确保获得GDR2补丁。

答案 5 :(得分:1)

您可能需要查看Liquibase之类的工具:http://liquibase.org/

答案 6 :(得分:1)

您可以使用visual studio 2015.转到工具 => SQL服务器 => 新架构比较

步骤1)选择来源目标数据库。 点击比较选项。

步骤2)比较完成后,您可以点击图标生成脚本(Shift + alt + G)

这将生成提交脚本。

步骤3)要为数据库更改生成回滚脚本,只需交换数据库步骤1

答案 7 :(得分:0)

我们发现推动更改的最佳方法是将数据库更改视为代码。所有更改都在脚本中,它们在源代码管理中,并且是版本的一部分。在任何情况下都没有任何东西被推到没有编写脚本和源代码控制的产品中。这样你就不会意外地推送dev中的更改,但还没有准备推送到prod。此外,您可以将prod数据恢复到开发框并重新运行尚未推送的所有脚本,并且您拥有新数据并保留所有开发工作。当你对正在变换的表有查找值时,这也很有效;在其他东西也移动之前,我想推送到prod。编写插入脚本并将其与版本的其余代码放在一起。

很高兴使用这些工具进行比较以查看脚本中是否遗漏了某些内容,但我绝不会单独依赖它们。刺激“尚未准备好黄金时间”的东西的风险太大了。

答案 8 :(得分:0)

一个好的数据库设计工具(例如Sybase Powerdesigner)将允许您创建对数据模型的设计更改,然后生成实现这些更改的代码。然后,您可以根据需要存储和运行代码。当您继承未构建的数据库时,此工具还应该能够进行逆向工程。

即使在有组织,记录完备的环境中,查找开发和生产之间的所有变更通常也很困难。 Idera有一个SQL Server工具,可以检测开发和生产数据库之间的结构差异,以及另一个检测数据变化的工具。事实上,我经常使用这些方法走向另一个方向,并将开发与生产同步以开始一个新项目。