【问题标题】:Patch an MS-SQL-Server database in live environment在实时环境中修补 MS-SQL-Server 数据库
【发布时间】:2016-04-14 14:36:18
【问题描述】:

我有一个使用 MS-SQL-Server 来存储数据的应用程序。我们将分几个步骤推出该应用程序,以便用户首先测试基本功能,然后我们会随着时间的推移添加功能。

这可能会导致数据库发生变化。在早期阶段,我们可以删除整个数据库并使用脚本重新创建所有内容。但最终,用户希望保留他们的测试数据。例如,如果我向表中添加新列,我不想删除并重新创建整个表,从而丢失用户迄今为止在此过程中存储的所有数据。

所以,我需要一个脚本,将 myDatabase v1.0 更新为 myDatabase v2.0。

我的问题是:创建此类更新脚本的最佳方法是什么?我是否必须手动跟踪所有更改,然后自己组装更新脚本?或者是否有可以(半)自动从旧数据库和新数据库创建更新脚本的功能?

最后,应用此补丁的最佳方法是什么?我有一个 ASP.NET Web-API,所以我可以创建一个控制器 api/updates/v1.0-to-v2.0 在服务器上应用脚本的代码会是什么样子?

提前致谢,
弗兰克

【问题讨论】:

  • 如果您使用的是 Visual Studio 数据库项目或 SqlServerDataTools,这些差异/发布操作会变得更加容易。但是,根据更新或补丁的性质,您可能需要一些停机时间。

标签: c# sql-server database patch


【解决方案1】:

我正在努力解决这个问题,请查看 dbpatcher.com,我创建的软件将有助于更轻松地迁移数据库更改。我目前正在整理网站,因此欢迎提供反馈。该程序本身尚不可用,因为我正试图找出发布的详细信息。

【讨论】:

    【解决方案2】:

    如果这是一个持续关注的问题(企业),您应该真正考虑不同的环境,即。测试、分期和生产。通过这种方式,您可以在原始环境(看起来与生产环境完全相同)中测试您的部署和数据库脚本更改。

    鉴于此,要回答您的问题,确实没有一个好的方法可以做到这一点。我见过人们使用差异工具来检测模式之间的差异,它会创建脚本来同步两个模式,但这并不是万无一失的。

    我发现编写更改脚本并将其与版本控制和安装过程(手动或自动)相结合是获得一致结果的唯一方法,即使有时也会失败。

    代码优先实体框架正试图解决这个问题,但它不是许多商店的选择。

    我很想看到一个很好的工具来管理这个问题,但是这里最大的问题是一组不同的框架和人为错误。

    就停机时间而言,确实不存在 Web 应用程序的现场就地升级。有一些方法可以将其缓解到最低限度,例如一次更新一组负载平衡的 Web/App 服务器,然后让用户无法使用新软件。如果您正在更改表格,那么您不会锁定表格并中断用户的可能性非常低。

    【讨论】:

      【解决方案3】:

      感谢您的回复!

      我有不同的环境,我关心的是如何在不丢失生产环境中的数据的情况下更改数据库架构(当然,如果可能的话)。停机时间不是什么大问题。由于我还没有工作效率,我只是创建了一个脚本来重新创建整个数据库,但是当用户存储了实时数据时,他可能会有点……不高兴。

      redgate 有一个不错的工具,似乎可以解决这个问题,但我还没有检查过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        相关资源
        最近更新 更多