by Maxi Accotto
7. enero 2012 02:50
En muchas oportunidades necesitamos hacer un Script de los jobs de producción para llevarlos a otro sitio. Por ejemplo a contingencia.
Para ello podríamos utilizar el siguiente script de Powershell y agregarlo a un step de un job de SQL 2005 / 2008 / R2.
El mismo toma los Jobs que tienen como categoría la palabra producción y genera el script (.sql) de dichos jobs
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')| out-null
$RutaScripts = "\\servername\"
# Create an SMO connection to the instance
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') "SERVIDORSQL"
$jobs = $s.JobServer.Jobs
$scrp = new-object ('Microsoft.SqlServer.Management.Smo.Scripter') ($s)
$scrp.Options.FileName = $f
$scrp.Options.AppendToFile = $true
foreach ($job in $s.jobserver.jobs)
{
$a = $job.category
if ($a.toupper() -eq "PRODUCCION")
{
$filename = $job.name + ".sql"
write-host $filename
$f = [System.IO.Path]::Combine($RutaScripts, $filename)
out-file -filePath $f -inputobject "USE MASTER `nGO`n"
out-file -filePath $f -inputobject "DECLARE @jobId binary(16) `n SELECT @jobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'$job') `n
IF (@jobId IS NOT NULL) `n EXEC msdb.dbo.sp_delete_job @jobid `n go `n " -append
$scrp.Script($job) >> $f
out-file -filePath $f -inputobject "`n" -append
out-file -filePath $f -inputobject "`n EXEC msdb.dbo.sp_update_job @job_name=N'$job',@enabled=0 `n GO `n" -append
}
else
{
}
}
ScriptJobByPowerShell scriptjobByPowerShell