Nuestro equipo de DBA no verifica las copias de seguridad usando lo siguiente TSQL
(que se puede hacer fácilmente después de la copia de seguridad y casi no lleva tiempo, por lo que no entiendo por qué no):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
Han tenido problemas en el pasado, por lo que aunque pensamos que aprenderían de ello, no lo han hecho. Creé un script de Powershell para hacer esto porque tenemos más de 100 servidores y solo quiero ejecutar este script en todas las copias de seguridad solo para asegurarme de que sean válidas. El siguiente script se ejecuta correctamente (en el sentido de que no se rompe ni arroja errores), tengo curiosidad por saber si hay una manera de recuperar el mensaje impreso en Powershell que normalmente obtendríamos en SSMS donde dice que el conjunto de copia de seguridad en el archivo 1 es válido como verificación
$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
También es bueno si desea redirigir la salida para su uso posterior en lugar de simplemente imprimirla en el host de inmediato.
invoke-sqlcmd -verbose
?