问题描述
想在周六,周日和周一上午暂停数据库是否想使用任何脚本或任何选项自动恢复?或如何?
谢谢!
解决方法
此任务没有特定功能,但是可以使用多种技术来实现。要执行“暂停/重启”功能,可以使用Azure REST API。
重复计划
我建议使用具有强大重复触发功能的Logic Apps。您很可能需要每天运行一次,但是您可以指定小时数。要仅在特定日期继续,您需要添加一些其他处理以从运行时解析DayOfWeek:
dayOfWeek(convertFromUtc(utcNow(),'Eastern Standard Time'))
获取承载令牌
在此示例中,我使用服务原理进行身份验证,并使用Azure Key Vault存储相关机密:
检查资源状态
下一步是检查数据仓库的状态:如果它已经暂停,我们只想在状态为“在线”时尝试暂停它。为此,我们将再次调用API,这一次传递的是我们在上面获取的Bearer令牌:
在此示例中,我使用变量而不是Key Vault来演示不同的方法。
我们将使用上一个操作的StatusCode属性进行此确定:
检查是否有任何正在运行的作业
如果数据仓库的状态为“联机”,则接下来要检查的是是否有任何活动的进程。我们通过在数据仓库本身上运行查询来完成此任务:
然后,我们将结果捕获到一个变量中,并将其用于另一个Condition活动:
body('Get_Ops_Count')?['resultsets']['Table1'][0]['OpsCount']
发出暂停命令
如果没有活动的作业,我们可以自由地发出“暂停”命令。再一次,我们将使用之前获得的Bearer令牌来利用REST API:
重新启动数据仓库
重新启动过程非常相似,只是不需要检查活动进程,因此您应该能够从本示例中推断出这一点。要重新启动数据仓库,REST端点是“恢复”而不是“暂停”。