首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TSQL从task_id存储过程中获取rds_restore_database

问如何使用TSQL从task_id存储过程中获取rds_restore_database
EN

Stack Overflow用户
提问于 2022-06-13 17:15:26
回答 1查看 322关注 0票数 0

我需要从我自己的过程中执行rds_restore_database存储过程,所以我需要在执行之后得到rds_task_status,因为等待恢复是成功的。

在还原之后,我不知道如何在变量中获得task_id:

代码语言:javascript
复制
exec msdb.dbo.rds_restore_database 'whatever', 'S3_bucket_bak'

我不知道如何让其他变量中的生命周期列检查还原状态:

代码语言:javascript
复制
exec [msdb].[dbo].[rds_task_status] @task_id=@mytaskid

我尝试的唯一方法是将结果插入到临时表中:

代码语言:javascript
复制
INSERT INTO #MyTempTable exec @task_id = msdb.dbo.rds_restore_database 'whatever', 'S3_bucket_bak'

但是,无论何时我想检查恢复状态如何,我都必须删除并再次插入。

还有别的解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-24 11:25:58

我能找到的最好的解决办法是:

代码语言:javascript
复制
declare @my_task_id int
select top 1 @my_task_id = task_id from msdb.dbo.rds_fn_task_status(NULL,0) order by task_id desc
select @my_task_id task_id

或者,如果您想要做的和我一样,在完成所有任务之前停止代码执行,那么下面的操作应该有效:

代码语言:javascript
复制
declare @sec int = 0;
WHILE ((SELECT top 1 lifecycle FROM msdb.dbo.rds_fn_task_status(NULL,0) order by task_id desc) <> 'SUCCESS')
BEGIN
    WAITFOR DELAY '00:00:10';
    set @sec = @sec + 10
    if @sec >= 1800 RAISERROR ('Timout. Copying from S3 to RDS server took more than 30 minutes.',16,1)
END

如果rds团队创建的存储过程只返回task_id就好多了。但他们不知道所以..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72606692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档