【问题标题】:Keep different database environment synched保持不同的数据库环境同步
【发布时间】:2013-02-14 08:08:49
【问题描述】:

目前我们手动将更改从我们的 DEV SQL 环境推送到 TEST 和生产(使用 Visual Studio 中的模式比较,加上我们在更改 DEV 时创建的一些脚本),但这非常耗时且容易出错.

我们想知道是否有更好的方法来做到这一点以及我们需要如何实施。

我读过可能会使用版本控制(这将如何工作?),或者可能使用 RED GATES 的 SQL 源代码控制(但这可以用于将更改推送到 TEST,还是仅用于跟踪本地更改?)

我们需要一种可靠的方式来更新我们的测试和生产服务器,这样数据就不会损坏/丢失...我们使用 SQL Server 2008 R2 和 Visual Studio 2012。

我们正在开始一个新项目,所以是时候做出改变了!感谢您的宝贵时间!

【问题讨论】:

  • 您还可以查看 Red Gate 的 SQL Compare。从他们的网站“比较数据库模式和部署差异”
  • The daily WTF 上有一篇关于这个主题的好文章。不开玩笑,去读吧!

标签: sql-server project-management development-environment change-management


【解决方案1】:

一种简单的方法是在数据库中创建一个简单的版本表,其中一行一列存储版本号。

现在每次你将更改推送到 dev 时,创建增量 sql 脚本,拥有一个基于当前 db 版本的主脚本,将调用必要的增量 sql 脚本将架构升级到最新版本。

小心删除列、更改列类型或减小列大小,例如在增量脚本中将 varchar(100) 转换为 varchar(10),因为如果计划不当,可能会导致数据丢失。

你的增量脚本应该是幂等的,它们可以反复运行,以防升级过程中数据库崩溃的情况。

【讨论】:

    【解决方案2】:

    虽然使用 SQL 源代码控制有很多好处(我希望您试一试,因为我是产品经理!),但它的目的仅限于版本控制,而不是管理和部署到您的各种环境。正确的 Red Gate 工具是 Deployment Manager。

    http://www.red-gate.com/delivery/deployment-manager/

    这里有一个由 Deployment Manager 项目团队维护的博客,它可以让您了解该工具的发展方向:

    http://thefutureofdeployment.com/

    【讨论】:

      【解决方案3】:

      VS 中的 Schema Compare 有 CLI 吗?如果是这样,您可能可以自动化它在一天中运行几次。如果没有,您可以尝试使用其他一些支持 CLI 的第三方工具,例如 ApexSQL Diff 用于架构,ApexSQL Data Diff 用于同步数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        相关资源
        最近更新 更多