Nossa equipe de DBA não verifica os backups usando o abaixo TSQL
(o que pode ser feito facilmente após o backup e leva quase pouco tempo, por isso não entendo por que não):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
Eles tiveram problemas no passado, então, mesmo que pensássemos que aprenderiam com isso, eles não tiveram. Criei um script do Powershell para fazer isso porque temos mais de 100 servidores e só quero executar esse script em todos os backups apenas para garantir que eles sejam válidos. O script abaixo é executado corretamente (na medida em que não quebra nem gera erros). Estou curioso para saber se há uma maneira de obter a mensagem impressa no Powershell que normalmente entraríamos no SSMS, onde diz O backup definido no arquivo 1 é válido como verificação.
$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()
}
Invoke-SqlCmd ... -Verbose
também é bom se você deseja redirecionar a saída para uso posterior, em vez de apenas imprimi-la no host imediatamente.
invoke-sqlcmd -verbose
?