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()
}
sql-server
powershell
Question3CPO
fonte
fonte
invoke-sqlcmd -verbose
?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.Respostas:
Capturando a saída do InfoMessage (PRINT, RAISERROR) do SQL Server usando o PowerShell
O truque, como Jonathan aponta, é que você precisa ter um ouvinte conectado ao gerenciador de conexões para ouvir as ações de impressão ou erro.
Eu também canalizei a saída da adição de um parâmetro,
Out-Null
pois esse era o ruído que eu não precisava.fonte