检测通过异步 TSQL 命令扩展 Azure SQL 数据库是否失败

检测通过异步 TSQL 命令扩展 Azure SQL 数据库是否失败

我有一个计划任务,它每晚运行一次,将现有的生产 Azure SQL 数据库复制到开发环境。复制后,我会缩小数据库的规模(实际上我将其放入弹性池中,以在多个其他数据库之间分摊成本),以降低成本,因为它不再用于生产,仅用于开发工作负载。这真的很容易做到,只需使用 TSQL 的一行代码:

ALTER DATABASE [newly-copied-db] MODIFY ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = [my-elastic-pool] ) );

此命令是异步的。它会立即返回

命令已成功完成。

实际上,将数据库移入弹性池可能需要一些时间。

我遇到的问题是弹性池分配的空间有限。如果由于我使用了太多空间而导致扩展操作失败,我需要知道。此外,如果知道作业已成功完成,那么我可以触发一些通知,那就太好了。

如何判断扩展操作是否失败(或者是否成功)?

理想情况下是通过事件/回调类型机制而不是轮询

答案1

尝试类似这样的方法dm_operation_status 动态管理窗口:

while (
    select top 1 state_desc
    from sys.dm_operation_status 
    WHERE resource_type_desc = 'Database'
    AND major_resource_id = @db
    AND operation = 'ALTER DATABASE' 
    order by start_time desc
) in ('PENDING', 'IN_PROGRESS')
begin
    print 'waiting for operation to complete: ' + convert(varchar,getdate(),120);
    waitfor delay '00:00:30';
end

while (
    select top 1 state_desc
    from sys.dm_operation_status 
    WHERE resource_type_desc = 'Database'
    AND major_resource_id = @db
    AND operation = 'ALTER DATABASE' 
    order by start_time desc
) in ('COMPLETE')
begin
    print 'complete!';
end
else
begin
    print 'failed!';
end

相关内容