假设我使用自己的(sql Azure)数据库进行生产和登台部署.如果分段中的模式已更改并且需要部署到生产中,那么是否有定义的方法可以在生产数据库上实现数据库升级(无需停机)?
例如如果我交换VIP登台< - >生产(同时以某种方式自动更改连接字符串)什么是自动升级sql azure数据库的最佳过程.
我的想法是在RoleEnvironmentChanging中发现环境变化(尽管不确定VIP交换甚至触发RoleEnvironmentChanginng)并在那时针对要成为数据库(即prod)运行sql脚本,但是我需要确保脚本是只运行一次,将有多个实例转换.
解决方法
因此,您的生产部署具有自己的sql Azure数据库和暂存部署,该部署具有自己的sql Azure数据库.在这种情况下,应用程序的连接字符串都指向两个不同的数据库.
您的第一个要求是在交换部署或执行某些操作时立即更改数据库架构,并且我对该设计有以下关注:
>如果您在角色内部编写任何代码以执行“ONCE且仅ONCE”操作,则无法保证仅在ONCE上执行此操作.它将发生多次取决于几个场景,如
1.1在任何情况下,VM都需要由系统重新映像,并且此CODE将执行与上次重新映像时完全相同的操作
1.2您可以通过某些外部密钥的某些注册表方法保护它不会在角色启动或VM启动时发生,但是有完整的证据机制不会发生.
>因此,我建议您在准备SWAP部署时可以:
2.1运行脚本以更新到与生产相关的sql Azure架构(这对应用程序下载没有影响,因为它没有被触及,但在更新数据库架构时,您可能更清楚它对应用程序的影响)
2.2将分段部署中的配置更改为指向生产sql Azure(根本不会有任何生产应用程序停机)
2.3 SWAP部署(这也没有应用程序停机时间)
因此,即使您手动更新数据库架构然后SWAP部署,除了DB更新架构所花费的时间之外,没有明显的停机时间.