PowerShell e o dia a dia do DBA SQL SERVER
(verificando os jobs que falharam)
Para todos os scripts, gerar um txt com os nomes dos servidores envolvidos. Eu o chamei de servidores.txt e fica assim :
SERVER1\MSSQLSERVER_1
SERVER2\MSSQLSERVER_2
SERVER3\SQL2005
Os dois primeiros são 2008 e o terceiro 2005
Eu o gravo numa pasta chamada c:\dadosps, vocês irão ver esta chamada em todos os scripts
# Criação das tabelas no SQL SREVER
##########################################################
--Create table Diario.tb_Jobs ( Servidor varchar(50),
-- data datetime default getdate (),
-- nomejob varchar(100),
-- msg varchar(10) ,
-- UltimoVezRodou datetime
-- )
Este script pega todos os jobs enabled de cada servidor, verifica se houve erro e insere numa tabela do sql server.
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
$datas = (get-date).toshortdatestring()
##########################################################
#Atribui o Dabatase e Server central que receberão os dados
##########################################################
$ServidorCentral = "SERVER1\MSSQLSERVER_1"
$DatabaseCentral = "DBA"
foreach ($svr in get-content "C:\dadosps\servidores.txt" )
{
$data = ""
$Servidor=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"
$data = $Servidor.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and
$_.isenabled -eq $TRUE} | foreach {
$NomeJob = $_.name
$lastrunoutcome = $_.lastrunoutcome
$lastrundate = [string] $_.lastrundate
$lastrundate = $lastrundate.substring(3,2) + "/" + $lastrundate.substring(0,2) + "/" + $lastrundate.substring(6)
$sql = "set dateformat dmy insert into diario.tb_jobs(servidor,data,nomejob,msg,UltimoVezRodou) values ('$svr','$Datas','$NomeJob','$lastrunoutcome','$lastrundate')"
Invoke-Sqlcmd -ServerInstance $ServidorCentral -Database $DatabaseCentral -Query $sql
}
}
Simples não ?
PowerShell no Dia a Dia do DBA
http://laertejuniordba.spaces.live.com