Thi*_*y_S 4 sql-server powershell batch-file amazon-rds
在批处理或 powershell 中创建 EC2 或 RDS 实例时,您可以运行内置实例aws rds wait db-instance-available --db-instance-identifier 'myDbInstance'以等待其可用,然后再对其运行进一步命令。
我有一个脚本,可以将 RDS 快照恢复到新实例 ($devInstanceDnsName),然后将单个数据库从该实例(在 MS SQL 中)备份到 S3。在 powershell 中,要运行本机备份,请运行sqlcmd -X -b -S "tcp:$devInstanceDnsName,1433" -d dbName -U dbUser -P dbPwd -Q "exec msdb.dbo.rds_backup_database @source_db_name='dbName', @s3_arn_to_backup_to='arn:aws:s3:::backupsbucket/$backupFileName', @overwrite_S3_backup_file=1".
这是一个异步任务,它安排备份并立即返回。但是脚本如何知道本机备份何时完成并继续同步执行?
我做了一个简单的 powershell 函数,如下所示:
Wait-RdsNativeBackupSuccess -server "$devInstanceDnsName,1433" -database dbName -user dbUser -pwd dbPwd
Run Code Online (Sandbox Code Playgroud)
并定义如下:
function Wait-RdsNativeBackupSuccess($server, $database, $user, $pwd)
{
$startDate = Get-Date
$timeOutminutes = 45
$retryIntervalSeconds = 30
do {
$awsResponse = Invoke-Sqlcmd -ServerInstance $server -Database $database -Username $user -Password $pwd -Query "exec msdb.dbo.rds_task_status @db_name='dbName'" -DisableCommands -AbortOnError
Write-Host $awsResponse.lifecycle $awsResponse."% complete"
if($awsResponse.lifecycle -eq "SUCCESS") {break}
start-sleep -seconds $retryIntervalSeconds
} while ($startDate.AddMinutes($timeOutminutes) -gt (Get-Date))
}
Run Code Online (Sandbox Code Playgroud)
它每 X 秒调用rds_task_status存储过程,最多 X 分钟,直到获得生命周期值“SUCCESS”。
你当然可以改进这一点:
输出看起来像这样:
Task created successfully.
Task Id: 1
CREATED 0
CREATED 0
CREATED 0
IN_PROGRESS 0
IN_PROGRESS 0
IN_PROGRESS 5
IN_PROGRESS 5
IN_PROGRESS 10
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4170 次 |
| 最近记录: |