我们的团队正在将我们的一个数据库迁移到 Amazon RDS MS SQL Server。作为其中的一部分,我们必须重写一些存储过程。
我们有一个将数据库备份到网络存储的存储过程。
BACKUP DATABASE [MyDB] TO DISK = '\\myserver\share\MydbBackup.bak'
WITH RETAINDAYS = 0,
INIT
上面的存储过程是阻塞的,即它会暂停执行行exec stored_proc
——直到备份完成。
我已经更改了该存储过程,以便它使用存储过程,rds_backup_database
以便将备份保存在 S3 存储桶中。
exec msdb.dbo.rds_backup_database
@source_db_name='MyDB',
@s3_arn_to_backup_to='arn:aws:s3:::temp-poc-bucket/db_backups/MyDBBackup.bak',
@overwrite_s3_backup_file=1;
问题是我们的工作流程(从我们的应用程序调用存储过程)要求它是同步的。
有没有办法“等待”msdb.dbo.rds_backup_database
存储过程的执行?
AWS RDS文档。
根据文档:
因此,使用 启动备份后
rds_backup_database
,您只需要进入一个rds_task_status
用于查找当前状态的循环,如果它不是“SUCCESS”,您可以使用WAITFOR DELAY '00:00:30'
休眠 30 秒,然后继续循环检查状态再次重复。Stack Overflow 上也有这个答案,它实现了来自 PowerShell 的类似解决方案。无论您是在 PowerShell 还是 T-SQL 中实现代码,检查和循环的逻辑都是相似的。