Il nostro team DBA non verifica i backup utilizzando quanto segue TSQL
(che può essere facilmente eseguito dopo il backup e non richiede quasi tempo, quindi non capisco perché no):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
Hanno avuto problemi in passato, quindi anche se pensiamo che avrebbero imparato da esso, non lo hanno fatto. Ho creato uno script Powershell per farlo perché abbiamo circa 100 server e voglio solo eseguire questo script su tutti i backup solo per assicurarmi che siano validi. Lo script seguente viene eseguito correttamente (in quanto non si interrompe o genera errori), sono curioso di sapere se esiste un modo per recuperare il messaggio stampato in Powershell che normalmente verrebbe inserito in SSMS dove viene indicato Il set di backup nel file 1 è valido come verifica.
$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
è utile anche se si desidera reindirizzare l'output per un uso successivo anziché stamparlo immediatamente sull'host.
invoke-sqlcmd -verbose
?