Sql-Server

如何等待 rds_backup_database 儲存過程的執行?

  • March 8, 2022

我們的團隊正在將我們的一個數據庫遷移到 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_restore_database 儲存過程時,任務啟動並輸出有關任務的資訊。

當任務的生命週期狀態為SUCCESS時,任務完成。

您可以在執行備份或還原語句後獲取任務 ID。或者,您可以使用以下腳本來辨識特定數據庫的所有已完成和待處理的任務:

exec msdb.dbo.rds_task_status @db_name='database_name'

要跟踪作業的狀態,請使用以下 SQL 語句:

exec msdb..rds_task_status @task_id= 5

因此,使用 啟動備份後rds_backup_database,您只需要進入一個rds_task_status用於查找目前狀態的循環,如果它不是“SUCCESS”,您可以使用WAITFOR DELAY '00:00:30'休眠 30 秒,然後繼續循環檢查狀態再次重複。

Stack Overflow 上也有這個答案,它實現了來自 PowerShell 的類似解決方案。無論您是在 PowerShell 還是 T-SQL 中實現程式碼,檢查和循環的邏輯都是相似的。

引用自:https://dba.stackexchange.com/questions/308227