PowerShell e o dia a dia do DBA SQL SERVER

(verificando os jobs que falharam)

 
Todos os scripts eu criei um database chamado DBA no meu servidor central e um schema diario. As tabelas sempre serão criadas neste schema e database.

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

 
 
Vamos lá
 
 
##########################################################
# 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 ?

No meu primeiro Artigo eu mostro como rodar os scripts
 
 
Laerte Poltronieri Junior
PowerShell no Dia a Dia do DBA 
http://laertejuniordba.spaces.live.com