【问题标题】:Make Powershell Wait for SQL Script/Query to Finish让 Powershell 等待 SQL 脚本/查询完成
【发布时间】:2016-12-23 21:46:59
【问题描述】:

所以我正在尝试编写一个 Powershell 脚本来创建数据库备份、压缩备份并将其上传到 FTP 站点。这是我的脚本的一部分

示例脚本/代码:

Write-Host  "Backup of Database " $databaseName " is starting"
push-location

Invoke-Sqlcmd -Query "--SQL Script that backs up database--" -ServerInstance "$serverName"

pop-location
Write-Host  "Backup of Database " + $databaseName " is complete" 

#Create a Zipfile of the database
Write-Host "Compressing Database and creating Zip file...."
sz a -t7z "$zipfile" "$file"
Write-Host "Completed Compressing Database and creating Zip file!"

我想阻止执行“Invoke-Sqlcmd.......”部分之后的任何代码,直到备份数据库的 SQL 脚本完成,因为压缩行找不到备份数据库,因为备份需要相当长的时间才能完成。

我对使用 Powershell 非常陌生,并且不太了解我发现的其他几个可能相关的问题作为解决方案提供了哪些解决方案,因为我以不同的方式调用我的 SQL 语句。

可能的相关问题:

Get Powershell to wait for an SQL command to execute

Powershell run SQL job, delay, then run the next one

【问题讨论】:

  • 如果将它们放在一个函数中并等待返回会怎样。没有异步。
  • 你知道我可以在退货时检查什么吗?该脚本将替换现有备份,因此我无法检查该文件是否存在。
  • Invoke-SqlCmd 已经是一个同步 cmdlet。如果要进入下一步,那是因为语句执行完毕。
  • @BaconBits 我不知道。后来我确实看到了备份已经创建,但是脚本的压缩部分失败了,所以我想也许在调用脚本的压缩部分时备份还没有完成。我会仔细看看的。感谢您的信息。

标签: sql-server powershell


【解决方案1】:

您确定您的 ...script that backs up the database 不只是抛出错误并且 ps 继续吗?

这似乎表明它确实在等待该调用:

Write-Host  "starting"
push-location

Invoke-Sqlcmd -Query "waitfor delay '00:00:15';" -ServerInstance "$serverName"

pop-location
Write-Host  "complete" 

在任何情况下,您都应该防止文件存在,如果文件不存在则中止或轮询直到它存在(我不是 100% 知道何时将 .bak 文件写入磁盘)。

# abort 
if(!(test-path $file)) {
}

# or, poll 
while(!(test-path $file)) {    
    start-sleep -s 10;   
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多