数据库架构更改时的Azure无缝升级

Ian*_*971 7 azure

假设我使用自己的(SQL Azure)数据库进行生产和登台部署.如果分段中的模式已更改并且需要部署到生产中,那么是否有定义的方法可以在生产数据库上实现数据库升级(无需停机)?

例如,如果我交换VIP staging < - > production(同时自动更改连接字符串),自动升级sql azure数据库的最佳过程是什么.

我的想法是发现RoleEnvironmentChanging中的环境变化(虽然不确定VIP交换甚至触发RoleEnvironmentChanginng)并且在那时针对要成为数据库(即prod)运行sql脚本,但是我需要确保脚本是只运行一次,将有多个实例转换.

Avk*_*han 5

因此,您将拥有具有自己的SQL Azure数据库的生产部署和具有自己的SQL Azure数据库的登台部署。在这种情况下,两个应用程序的连接字符串都指向两个不同的数据库。

您的首要要求是在交换部署或进行某些操作时即时更改数据库架构,而我对该设计有以下关注:

  1. 如果您在角色内部编写任何代码以执行“仅一次且仅一次”操作,则无法保证这仅一次发生。它将发生多次,具体取决于多种情况,例如

    1.1在任何情况下,您的VM都需要由系统重新映像,并且此CODE将执行与上次重新映像期间完全相同的操作

    1.2您可以通过某些外部键的某种注册表方法保护它在角色启动或VM启动时不会发生,但是有一个完整的证明机制不会发生。

  2. 因此,我建议当您准备好交换部署时,您可以:

    2.1运行脚本以更新到与生产相关的SQL Azure模式(这不会影响应用程序下载,因为它没有被触及,但是在更新数据库模式时,您可能会更好地了解它如何影响应用程序)

    2.2更改登台部署中的配置以指向生产SQL Azure(这完全不会导致生产应用程序停机)

    2.3 SWAP部署(这也不会导致应用程序停机)

因此,即使您手动更新数据库架构然后进行SWAP部署,除了数据库更新架构所花费的时间外,也没有任何重大的停机时间。