Powershell e o dia a dia do DBA – II


Continuação II – Jobs/Backups – Checar os jobs falhos e suas causas.

Todos os scripts eu criei um database chamado DBA no meu servidor central e um schema diario. As tabelas sermpre 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

Bom, agora passando pra verificação de JOBS

Jobs /Backups

Checar os jobs que falharam

##########################################################
# 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 ?

da mesma maneira, gravar num .ps1 e executar.

Este script em particular, eu tive um "arranca rabo" com um MVP gringo.Eu estava  num forum e enchendo a paciência dele pra me ajudar a fazer um outro (na verdade era pra passar pra txt e subir pelo bulk insert – se alguem quiser me avise). Depois  implementei esse diretamente no sql server.

Foi quando ele me perguntou ,mas pra que vc quer fazer isso ?..não acho que seja viavél pois vc pode fazer pelo SSIS.

-fora que em determinada parte da conversa com meu ingles lindo e maravilhoso ( seu ser, eu estar, eu ir) eu disse para ele "e seu eu tiver 50,100 servidores"…bom..ele entendeu 50 mil e 100 servidores por causa da , decimal . Já imaginam  resto né.

Concordo plenamente, mas é uma questão de gosto. o SSIS é potente demais, mas a criação do pacote, job para rodar ele, conexao com os outros servidores..etc para mim ia ser mais complicado fazer no SSIS. Olhe o codigo em PS..não dá 30 linhas..eu acho muito mais produtivo assim. Outro ponto que preciso testar mais, mas a performance em PS foi muito superior do que num pacote SSIS……..mas cá um cá um.

O ótimo é inimigo do bom  !!!!  nada é tão bom que não possa ser melhorado..Se no momento atende as suas necessidades e da sua empresa.(teu gerente te da Bom dia, te convida pra almoçar…)é o que importa.

Isso me lembra uma frase que um DBA no meu início de carreira me disse : (nada a ver com PS)

"Modelagem correta é aquela que atende a necessidade da tua empresa"

Concordo com ele..um banco supernomarlizado vai ser um banco lento..na 6253652635 forma normal. Temos uma regras basicas, mas não existe certo e errado..se ta te atendendo e as necessidades da tua empresa..tá certo. Quantas vezes não tivemos que denormalizar pra chegar numa performance aceitável (não foram tantas assim..mas tive)..Bom..mas isso a gnte discute  outra hora

ANALISTAS, AD`s, TENHAM BOM SENSO..MODELAGEM É BOM SENSO.

I´ll be back

About Laerte Junior

Laerte Junior Laerte Junior is a SQL Server specialist and an active member of WW SQL Server and the Windows PowerShell community. He also is a huge Star Wars fan (yes, he has the Darth Vader´s Helmet with the voice changer). He has a passion for DC comics and living the simple life. "May The Force be with all of us"
This entry was posted in Powershell. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s