André César Rodrigues

André César Rodrigues

(0 comments, 71 posts)

This user hasn't shared any profile information

Home page: https://plus.google.com/109819051016115802654

Posts by André César Rodrigues

Entendendo os PAGE SPLITs e o que seria o FILL FACTOR.


Olá pessoal!
 
Os novos posts serão postados no meu novo blog abaixo a partir de hoje ok?
  
Entendendo os PAGE SPLITs e o que seria o FILL FACTOR.
 
https://blogs.msdn.microsoft.com/andrecr/2017/11/21/entendendo-os-page-splits-e-o-que-seria-o-fill-factor/

Abraço!

André
http://www.virtualpass.com.br/

SQL SATURDAY SP 676 (30/09) ESTÁ CHEGANDO!!!

Fala Galera! Todos bem? Espero que sim!

Um dos maiores eventos de SQL Server gratuítos está chegando! Já é no próximo sábado (30/09) !!! Não perca esta oportunidade! Network +++ SQL Server +++ Novidades +++ 

Estarei lá palestrando sobre como monitorar o SQL Server através do SQLdiag!!! 

Espero vocês lá!!! 

Abaixo site oficial do evento para vocês se inscreverem:

http://www.sqlsaturday.com/676/EventHome.aspx
http://www.virtualpass.com.br/

09/01/2017 – Meu primeiro dia como PFE SQL Server na Microsoft!

Ola pessoal tudo certo? Espero que sim!

Este não é um post técnico, porém não poderia deixar de compartilhar com vocês que acompanham meu blog esta nova conquista em minha carreira, afinal, escrever artigos, tirar dúvidas, montar cenários, estudar problemas, tudo isso me ajudou a chegar onde cheguei! Por isso também fica aqui meu MUITO BRIGADO a vocês leitores deste blog :)

Ontem, 09/01/2017, o sonho que tinha de trabalhar na Microsoft como PFE de SQL Server se tornou realidade! Gostaria de agraceder principamente a Deus e a minha familia, o apoio deles nas decisões em que tomei até aqui foi fundamental. Além deles, não poderia deixar de agradecer os amigos que me ajudaram a conquistar este sonho, não citarei os nomes aqui pois são muitos mas eles sabem de quem estou falando pois já agradeci a cada ...um deles. A experiência que eles me passaram e continuam me passando todos os dias me transformaram na pessoa e profissional que sou hoje.

Agora tenho novos desafios pela frente! O tempo não para e eu também não posso parar! Gogogo!!! =]

"Sem sonhos, a vida não tem brilho. Sem metas, os sonhos não têm alicerces. Sem prioridades, os sonhos não se tornam reais. Sonhe, trace metas, estabeleça prioridades e corra riscos para executar seus sonhos. Melhor é errar por tentar do que errar por se omitir! - Augusto Cury"



Um forte abraço e até a próxima!
http://www.virtualpass.com.br/

SQL Saturday SP 570 – Agenda oficial publicada!

Fala galera!

Foi publicada a agenda oficial do SQL Saturday SP 570! Estarei palestrando no evento com o mestre Fabio Gentile sobre as principais mudanças relacionadas a melhoria de performance do SQL Server 2016!

Para se inscrever e ver a agenda completa do evento basta acessar o site abaixo:


Esperamos vocês lá!

Abraço!

http://www.virtualpass.com.br/

SQL Saturday #570 – São Paulo – 2016



Fala galera tudo bem? Espero que sim!

Já estão abertas as inscrições para o SQL Saturday SP! O evento será realizado em 08 de outubro na UNIP do Tatuapé * SAVE THE DATE! *. Não percam esta oportunidade única de trocar experiências com outros profissionais da área e assistir palestras que irão discutir diversos assuntos relacionados ao produto!


Para este SQL Sat submeti duas sessões (*espero que ao menos uma delas seja aprovada rs*):


SQL Server 2016 - It Just Runs Faster
Descrição: esta sessão foi estruturada e será apresentada em conjunto com meu amigo e mestre em SQL Server Fábio Gentile, nessa sessão falaremos de mudanças internas do SQL Server 2016, fazendo com que ele seja muito mais rápido que as versões anteriores. Abordaremos conceitos sobre Log Threads, Particionamento de Memória, Scheduling entre outros.


Monitorando o SQL Server através do SQLdiag.
Descrição: esta sessão é a mesma que apresentei no SQL Sat de Joinville, a idéia é fazer com que todos saibam como configurar o SQLdiag de forma básica e aprendam a interpretar os dados que o mesmo vai gerar de um ambiente contendo o SQL Server.


Para se inscrever no evento e ter mais informações, basta acessar o site oficial:
Vejo vocês lá! GOGOGO SQL!

Um abraço!
http://www.virtualpass.com.br/

Fim do suporte ao SQL Server 2005!

Pessoal, tudo bem? Espero que sim!

Como a maioria de vocês já deve saber, chegou ao fim o suporte do SQL Server 2005, por isso, recomendo que leiam o artigo que escrevi para o blog dos PFE's, o mesmo pode ser acessado através do link abaixo:

https://blogs.msdn.microsoft.com/pfebrasilsql/2016/04/18/fim-do-suporte-ao-sql-server-2005-uma-versao-que-entrou-para-a-historia/

Um abraço e até a próxima!
http://www.virtualpass.com.br/

SQL SATURDAY #488 – JOINVILLE – FOI UM SUCESSO!

Olá pessoal tudo bem? Espero que sim!

Neste último final de semana aconteceu o SQL Server Saturday na cidade de Joinville/SC, o evento foi um enorme sucesso e reuniu mais de 300 pessoas que tiveram a oportunidade de assitir diversas palestras ministradas por diversos profissionais renomados na área. Já havia ido a outros “SQL SAT’s” mas este foi especial pois tive o imenso prazer de participar como palestrante! Agradeço a oportunidade dada pelo Rodrigo Dornel e o apoio dos demais amigos da comunidade. Quem quiser efetuar o download da minha apresentação pode fazê-lo através do link abaixo ou no site oficial do próprio evento:


Site do evento:

Abaixo estão algumas fotos do evento, é isso pessoal! GOGOGO SQL SERVER!!!




http://www.virtualpass.com.br/

SQL Saturday #488 – Joinville – 2016

Fala galera tudo bem com vocês? Espero que sim!

Hoje estou aqui para falar do evento que irá ocorrer no dia 09 de Abril deste ano em Joinville-SC, o SQL Saturday #488! 

Como a maioria deste mundo Microsoft já deve ter ciência, trata-se de um evento gratuito que reúne uma série de profissionais de SQL Server para palestrarem sobre diversos assuntos relacionados ao produto, felizmente neste evento, eu serei um dos palestrantes!

Vou falar um pouco sobre o SQLDiag, como configurar, como processar e analisar os dados que ele gera e como ele pode ser importante na sua empresa se você não conta com muitos recursos financeiros para monitorar seu ambiente com SQL Server. Para quem estiver pensando em participar da minha sessão e já quiser fazer um aquecimento, é possível conferir um webcast que gravei para a comunidade no seguinte link: https://www.youtube.com/watch?v=phb5y-l-y28


Para se inscrever no evento e saber das demais palestras, basta acessar o site oficial: http://www.sqlsaturday.com/488/eventhome.aspx


Bom, é isso galera! Conto com vocês lá! Não percam este grande evento, uma ótima oportunidade de aprender mais e de trocar experiências com outros profissionais da área =]

Um abraço!


http://www.virtualpass.com.br/

O Unit Separator (US) e o erro ao tentar desabilitar um JOB no SQL Server Agent!

Olá pessoal tudo certo? Espero que sim!

Recentemente no cliente passei por algo bem interessante, havia um JOB que não conseguia desabilitar no SQL Server Agent, quando eu tentava o erro abaixo ocorria:


Via T-SQL também dava o mesmo erro, porém surgiu a primeira dica:


Msg 6841, Level 16, State 1, Procedure tr_job_disable, Line 27

FOR XML could not serialize the data for node 'td' because it contains a character (0x001F) which is not allowed in XML. To retrieve this data using FOR XML, convert it to binary, varbinary or image data type and use the BINARY BASE64 directive.

Que objeto seria este? Como o ambiente era bem tranquilo com relação ao volume de transações, decidi rodar um Profiler capturando os seguintes eventos:

·         Errors & Warnings (All).
·         SP: StmtStarting
·         SQL: BatchStarting
·         SQL: StmtStarting

Com o Profiler no ar, tentei o Disable novamente no JOB para provocar o erro, vejam que interessante. Antes de ocorrer um Exception foi capturado o seguinte trecho de código:




Olhando a coluna Object Name e Object Type foi possível confirmar que o objeto envolvido era uma trigger:


Esta trigger estava criada dentro da tabela de sistema sysjobs no MSDB, e seu intuito era que toda vez que algum JOB fosse desabilitado um e-mail fosse enviado para os DBA’s. Voltando ao nosso erro:

Msg 6841, Level 16, State 1, Procedure tr_job_disable, Line 27

FOR XML could not serialize the data for node 'td' because it contains a character (0x001F) which is not allowed in XML. To retrieve this data using FOR XML, convert it to binary, varbinary or image data type and use the BINARY BASE64 directive.

Nosso problema dentro da trigger está no comando abaixo, mais precisamente no que esta marcado em amarelo:

SET @tableHTML =   
   N'<H1>Job desabilitado!</H1>' +   
   N'<table border="2">' +   
   N'<tr><th>Job</th>'+   
   N'<th>Server</th>'+             
   N'<th>Data</th>'+       
   N'<th>Usuário</th></tr>'+   
   CAST ( ( SELECT td =Job,       '',   
       td = @@servername, '',   
       td =data, '',    
       td =Usuario, ''          
       FROM#TableIC            
       FOR XML PATH('tr'), TYPE    
   ) AS NVARCHAR(MAX) ) +   
   N'</table>';  

O SQL está dizendo que existe um caracter inválido 0x001Fpara formatação do e-mail, mas quem seria 0x001F?

Pesquisando um pouco descobri que este é o valor hexadecimal correspondente ao UNIT SEPARATOR (US), um caracter que seria uma espécie de “underline”, visível apenas em alguns editores de texto:

Unicode Map : Public Unicode Character Map

What is character 0x1f?

Já sabendo do US notei outra coisa, vejam como ficou a seleção do job no SQL Server Agent quando foi "clicado":

Ele tem realmente um “espaço em branco” na frente. Pois bem, gerei o script do mesmo. No Management Studio do SQL Server, tudo ok:

Mas no Notepad++, notem o US aparecendo!

E no Word, notem o “_”aparecendo!

Desabilitando a trigger, ou então removendo o USdo nome do JOB:


Sucesso! Foi possível desabilitar o job.

Para fechar o assunto, deixo como recomendação que todo script escrito fora do SSMS seja analisado com cuidado e lembro ainda, que triggers sobre tabelas de sistema não são suportadas pela Microsoft, conforme link abaixo:

System Databases

Espero que tenha sido útil! Um abraço!
http://www.virtualpass.com.br/

Monitore o Event Viewer combinando o SQL + Powershell + Database Mail!

Olá pessoal tudo certo? Espero que sim!

Recentemente tenho me aventurado com algumas queries SQL Server combinadas com o Powershell e o resultado tem sido bem interessante. Vou compartilhar com vocês uma procedure que desenvolvi que realiza uma varredura do log de sistema do Event Viewer e envia um e-mail automaticamente para o time de DBA’s caso as condições dentro do IF/ELSE sejam atendidas. Este script pode ser uma saída simples de monitoração caso o local em que você trabalhe não possua softwares que realizem este trabalho.

Para que esta procedure funcione corretamente é necessário:

Definir uma base de dados onde ela será criada.
Powershell v.2.0 >
Diretório: C:\Temp (ou qualquer outro em que deseje colocar o arquivo csv que o Powershell irá gerar).
Database Mail do SQL Server devidamente configurado (Veja o link http://sqlmagu.blogspot.com.br/2015/06/problema-database-mail-x-smtp.html).
Permissões de BULK INSERT para a conta que rodará a procedure.
‘show advanced options’ habilitado, esta opção pode ser acessada via “sp_configure”.
‘xp_cmdshell’ habilitado no SQL Server para rodar o comando do Powershell, igual ao item anterior, esta opção pode ser acessada via “sp_configure”.

Como é feita a varredura do Event Viewer com o Powershell?

A coleta da informação é feita através da cmdlet Get-Eventlog, a qual tem a função especifica de fazer a leitura de diversos logs existentes no Windows (https://technet.microsoft.com/en-us/library/hh849834.aspx).

Condicionais da procedure:

Qual período de busca no Event Viewer?
Em dias.
Quais eventos devem ser procurados no Event Viewer?
Já deixei alguns pré-definidos no código.
Para qual ou quais e-mails serão enviados os alertas?
Definido na criação da procedure.

Abaixo esta o código e um exemplo do e-mail de alerta:

USE[MAGUDB]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


/*****************************************************************************************************

Monitoração dos erros do Event Viewer (SYSTEM) com o Powershell.
Criação: 17/08/2015
Atualização: 23/09/2015
Autor: André César Rodrigues

@Dias = Deve-se informar a quantidade de dias no passado que o PowerShell deverá ler do EventViewer.
@emails = Deve-se definir a lista de destinatários.

Exemplo de execução: exec stp_Verifica_EventViewer 1

******************************************************************************************************/

CREATE PROCEDURE [dbo].[stp_Verifica_EventViewer] (@Dias INT, @emails NVARCHAR(MAX)='testmail@sqlmagu.com.br')
AS
BEGIN

PRINT 'Dias configurados para busca: ' + convert(varchar(10),@Dias)

SET NOCOUNT ON

--Declaração das váriaveis...

DECLARE@eventlist NVARCHAR(MAX)
DECLARE @cmd VARCHAR(8000)

--Cria tabela temporária que irá armazenar os eventos...

CREATE TABLE #ErrosEvtVwr
(
ID_Evento NVARCHAR(max) null,
Ocorreu_em NVARCHAR(max) null,
Mensagem NVARCHAR(max) null
)

--Abaixo está a lista de eventos a serem buscados no Event Viewer, estes devem estar com "" pois serão processados pelo Powershell...

SET@eventlist = '"55","1001","1006","1037","1038","1069","1074","1119","1127","1135","1146","1168","1172","1177","1183","1196","1205","1230","1564","6005","6006","6009","7024","7031","7034"'

PRINT 'Eventos que foram buscados: ' + @eventlist

--Abaixo atribuo a váriavel @cmd o comando do PowerShell, notem que no meio do comando se espera o valor da
--váriavel @Dias, ou seja, para executar a procedure você deve informar a quantidade de dias passados para o EventViewer ser lido...

SELECT @cmd = 'powershell -command "$eventLog = Get-EventLog -Log System -After (Get-Date).AddDays(-' + convert(varchar(10),@Dias) + ') | Select-Object EventID, TimeGenerated,Message;$list = @('+ @eventlist + ');$events = @();foreach($event in $list){$events += $eventLog | Where {$_.EventID -eq $event}}$events | Export-CSV c:\temp\erros.csv -noTypeInformation -ErrorAction SilentlyContinue'

--Execução do cmd preparado acima...

EXEC xp_cmdshell @cmd,no_output

--Insert na tabela baseado no csv gerado pelo PS...

BEGIN TRY
    BULK
          INSERT #ErrosEvtVwr
          FROM 'c:\temp\erros.csv'--Diretório de sua preferência...
          WITH
          (
          FIELDTERMINATOR = ',',
          ROWTERMINATOR = '\n'
          )
END TRY
BEGIN CATCH
    BULK
          INSERT #ErrosEvtVwr
          FROM 'c:\temp\erros.csv' --Diretório de sua preferência...
          WITH
          (
          FIELDTERMINATOR = ',',
          ROWTERMINATOR = '''+CHAR(10)+''' --Proteção contra um erro ao realizar o Bulk de um arquivo CSV...
          )
END CATCH;

--Se houver eventos (contagem de linhas >0), prepara e envia o e-mail...

IF (Select count(1) from #ErrosEvtVwr) >0
BEGIN

DECLARE@subject NVARCHAR(MAX)
DECLARE@servername NVARCHAR(150)

SET@servername = @@SERVERNAME
SET @subject = 'Erros registrados no EventViewer (SYSTEM) - Instância: ' +@servername

DECLARE@tableHTML  NVARCHAR(MAX) ;

SET@tableHTML =
    N'<H1>Erros registrados no EventViewer (SYSTEM) - Instância: ' + @servername + '</H1>' +
          N'<table border="1">' +

    CAST ( ( SELECT td = ID_Evento, '',
                                                td = Ocorreu_em, '',
                                                td = Mensagem, ''
              FROM #ErrosEvtVwr
              FOR XML PATH('tr'), TYPE
    ) AS NVARCHAR(MAX) ) +
    N'</table>';

          EXEC msdb.dbo.sp_send_dbmail @recipients=@emails,
    @subject = @subject,
    @body = @tableHTML,
    @body_format = 'HTML' ;
PRINT 'E-mail enviado para: ' +@emails
END
ELSE -- Se não houver eventos, nenhum e-mail é enviado...
PRINT 'Os eventos buscados não foram encontrados no Event Viewer de Sistema no período configurado!'

PRINT 'Fim da execução!'

--Drop da tabela temporária criada no começo do script...

DROP TABLE #ErrosEvtVwr

END
GO

Qualquer problema com o script por favor reportem e fiquem a vontade para mudarem o código =)

É isso pessoal! Um abraço e até a próxima!
http://www.virtualpass.com.br/
André César Rodrigues's RSS Feed
Go to Top