假设我有一个生产部署和临时部署,两者都使用自己的 (SQL Azure) 数据库。如果暂存中的模式已更改并且需要部署到生产中,是否有一种定义的方法可以在生产数据库上实现数据库升级(无需停机)?
例如如果我交换 VIP staging 生产(同时以某种方式自动更改连接字符串),自动升级 sql azure 数据库的最佳流程是什么。
我的想法是发现 RoleEnvironmentChanging 中的环境变化(尽管不确定 VIP 交换是否会触发 RoleEnvironmentChanginng),然后针对未来数据库(即 prod)运行 sql 脚本,但是我需要确保该脚本是仅运行一次,将会有多个实例转换。
因此,您有具有自己的 SQL Azure 数据库的生产部署和具有自己的 SQL Azure 数据库的临时部署。在这种情况下,两个应用程序的连接字符串都指向两个不同的数据库。
您的第一个要求是在交换部署或执行某些操作时动态更改数据库架构,我对此设计有以下担忧:
-
如果您在角色中编写任何代码来执行“一次且仅一次”操作,则不能保证这种情况只会发生一次。它会发生多次,具体取决于多种情况,例如
1.1 在任何情况下,您的虚拟机都需要由系统重新映像,并且此代码将执行与上次重新映像期间完全相同的操作
1.2 您可以通过某些外部密钥的某些注册表方法来保护它在角色启动或VM启动时不会发生,但有完整的证明机制不会发生。
-
因此,我建议当您准备好交换部署时,您可以:
2.1 运行脚本以更新到与生产相关的 SQL Azure 架构(这不会影响应用程序下载,因为它没有被触及,但是当您的数据库架构更新时,您可能会更好地知道它如何影响您的应用程序)
2.2 更改暂存部署中的配置以指向生产 SQL Azure(这根本不会导致任何生产应用程序停机)
2.3 交换部署(这也不会导致应用程序停机)
因此,即使您手动更新数据库架构,然后交换部署,除了数据库更新架构所花费的时间之外,也不会出现明显的停机时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)