locked
Rotinas de monitoramento - SQL2008 RRS feed

  • Pergunta

  • Eu gostaria de criar as 2 rotinas abaixo no sql2008 para monitorar os bancos :
    1) Checar tamanho de área disponível em um diretório específico.
    2) Checar se tamanho do .ldf de um determinado banco passou do limite que eu definir.

    Quando ocorrer algum problema, ele terá que me ser reportado via email.
    Eu já tenho jobs de backups que geram notificações via email quando ocorre algum problema. Então só falta encaixar essas rotinas.
    Alguém poderia me ajudar ?

    Eduardo
    quarta-feira, 10 de março de 2010 19:57

Respostas

  • efcampos,

    sua necessidade é monitoramento de objetos do sistema operacional, e não do SQL Server. Como existem poucos mecanismos do SQL Server para fazer isso, sugiro usar scripts WMI ou powershell para levantar os dados do Windows.

    Quando tive a mesma necessidade fiz o seguinte:

    1 - Contrução de scripts de sistema operacional para levantamento das informações. Estes scripts geravam arquivos csv
    2 - Agendamento de job do Windows para rodar os scripts do ítem 1 gerando os csv
    3 - Pacote DTS agendado para importar os arquivos csv para tabelas de um bd de monitoramento
    4 - Job do SQL Server que lia a tabelas de monitoramento 

    Se você estiver usando o SQL Server 2008, pode usar o SSIS para fazer quase todos os passos. Apenas a construção de scripts do SO deverá ser feita "na unha". 
    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    quinta-feira, 11 de março de 2010 12:08
  • efcampos,

    não conheço forma automática de controlar o tamanho do ldf, mas você pode fazer o seguinte
    1 - criar um alert com um número de erro que ainda não esteja sendo usado. Voce pode fazer isso pela interface grafica ou com o codigo abaixo.
    2 - criar um job que leia o campo size do  sysfiles da base e faça log do "estouro" do arquivo e gere a mensagem de erro criada no item anterior.

    Segue exemplo do código

    USE

     

    [msdb]

    GO

    EXEC

     

    msdb.dbo.sp_add_alert @name=N'estourolog',

    @message_id

    =5555,

    @severity

    =0,

    @enabled

    =1,

    @delay_between_responses

    =0,

    @include_event_description_in

    =1,

    @job_id

    =N'00000000-0000-0000-0000-000000000000'

    GO



    --cria tabela de log CREATE TABLE arquivo_log (nome varchar(30), data datetime , tamanho int); GO --variável do tamanho máximo a ser verificado DECLARE @tamanhomaximo int -- tamanho em MB SET @tamanhomaximo = 100 --verificação do estouro do tamanho estipulado IF EXISTS ( SELECT COUNT(*) FROM sysfiles WHERE size*8/1024 > 80--@tamanhomaximo AND groupid=0 ) BEGIN INSERT INTO arquivo_log (nome, data, tamanho) SELECT name, GETDATE(), size*8/1024 FROM sys.sysfiles
    WHERE groupid=0
    raiserror (5555,0,0)


    END GO SELECT * FROM arquivo_log;



    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    quinta-feira, 11 de março de 2010 17:32

Todas as Respostas

  • efcampos,

    sua necessidade é monitoramento de objetos do sistema operacional, e não do SQL Server. Como existem poucos mecanismos do SQL Server para fazer isso, sugiro usar scripts WMI ou powershell para levantar os dados do Windows.

    Quando tive a mesma necessidade fiz o seguinte:

    1 - Contrução de scripts de sistema operacional para levantamento das informações. Estes scripts geravam arquivos csv
    2 - Agendamento de job do Windows para rodar os scripts do ítem 1 gerando os csv
    3 - Pacote DTS agendado para importar os arquivos csv para tabelas de um bd de monitoramento
    4 - Job do SQL Server que lia a tabelas de monitoramento 

    Se você estiver usando o SQL Server 2008, pode usar o SSIS para fazer quase todos os passos. Apenas a construção de scripts do SO deverá ser feita "na unha". 
    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    quinta-feira, 11 de março de 2010 12:08
  • Alex,

    Eu pensava que pelo menos para controlar o tamanho dos arquivos ldf, existisse uma forma simples de fazer dentro do próprio SQL.
    Você tem como me mandar algum script para eu ter uma idéia melhor desse processo ?

    Eduardo
    quinta-feira, 11 de março de 2010 12:47
  • efcampos,

    não conheço forma automática de controlar o tamanho do ldf, mas você pode fazer o seguinte
    1 - criar um alert com um número de erro que ainda não esteja sendo usado. Voce pode fazer isso pela interface grafica ou com o codigo abaixo.
    2 - criar um job que leia o campo size do  sysfiles da base e faça log do "estouro" do arquivo e gere a mensagem de erro criada no item anterior.

    Segue exemplo do código

    USE

     

    [msdb]

    GO

    EXEC

     

    msdb.dbo.sp_add_alert @name=N'estourolog',

    @message_id

    =5555,

    @severity

    =0,

    @enabled

    =1,

    @delay_between_responses

    =0,

    @include_event_description_in

    =1,

    @job_id

    =N'00000000-0000-0000-0000-000000000000'

    GO



    --cria tabela de log CREATE TABLE arquivo_log (nome varchar(30), data datetime , tamanho int); GO --variável do tamanho máximo a ser verificado DECLARE @tamanhomaximo int -- tamanho em MB SET @tamanhomaximo = 100 --verificação do estouro do tamanho estipulado IF EXISTS ( SELECT COUNT(*) FROM sysfiles WHERE size*8/1024 > 80--@tamanhomaximo AND groupid=0 ) BEGIN INSERT INTO arquivo_log (nome, data, tamanho) SELECT name, GETDATE(), size*8/1024 FROM sys.sysfiles
    WHERE groupid=0
    raiserror (5555,0,0)


    END GO SELECT * FROM arquivo_log;



    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    quinta-feira, 11 de março de 2010 17:32
  • Hoje no site SQLServerCentral saiu um artigo mais ou menos a respeito desta necessiade que você tem.
    Dá uma olhada lá. 
     Log Growing Pains


    Alexandre Baseio Se a minha ajuda lhe for útil não esqueça de classificar.
    quinta-feira, 11 de março de 2010 18:20