我们的 DBA 团队不使用以下方法验证备份TSQL
(这可以在备份后轻松完成并且几乎不需要时间,所以我不明白为什么不这样做):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
他们过去曾遇到过问题,所以即使我们认为他们会从中吸取教训,但他们没有。我创建了一个 Powershell 脚本来执行此操作,因为我们有大约 100 多台服务器,我只想针对所有备份运行此脚本以确保它们有效。下面的脚本运行正确(因为它不会中断或抛出错误),我很好奇是否有办法在 Powershell 中获取打印的消息,我们通常会在 SSMS 中得到它指出文件 1 上的备份集是作为验证有效。
$SqlCon = New-Object System.Data.SqlClient.SqlConnection
$SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master"
$baks = Get-ChildItem "D:\Backups\" -Filter *.BAK
foreach ($bak in $baks)
{
$SqlCon.Open()
$cd = New-Object System.Data.SqlClient.SqlCommand
$cd.Connection = $SqlCon
$cd.CommandText = "RESTORE VERIFYONLY FROM DISK = @f"
$cd.Parameters.Add("@f", $bak.FullName)
$cd.ExecuteNonQuery()
$SqlCon.Close()
}
使用 PowerShell 从 SQL Server 捕获 InfoMessage 输出(PRINT、RAISERROR)
正如乔纳森指出的那样,诀窍是您需要将一个侦听器附加到连接管理器,以侦听打印或错误操作。
我还将添加参数的输出通过管道传输,
Out-Null
因为那是我不需要的噪音。