Páginas

4 de jun. de 2012

Pesquisando o log de alertas no Oracle Database 11G

Olá pessoal,
 
     O artigo de hoje é bastante útil para os DBAs que já atualizaram ou que pretendem atualizar seus Bancos de Dados (BDs) Oracle Database 9i ou 10G para 11G. No Oracle 11G muita coisa mudou referente ao formato e locais em que os dados de diagnóstico (atualmente inclui o log de alerta, traces, arquivos de incidentes e problemas e relatórios do Health Monitor) são gerados. Nesta última versão do Oracle, foi criado o Automatic Diagnostic Repository (ADR), que é um novo repositório para todas essas informações e que tem como objetivo principal centralizar o armazenamento das informações de diagnóstico de todos os produtos Oracle, de um determinado servidor, em um único ponto de referência, chamado ADR Base.
       
     As informações do ADR são armazenadas, por padrão, na pasta $ORACLE_BASE/diag, mas sua localização pode ser alterada configurando-se o parâmetro DIAGNOSTIC_DEST. Cada produto Oracle tem seu próprio diretório de diagnóstico na pasta raiz do ADR ($ORACLE_BASE/diag) e possui a seguinte estrutura de subdiretórios:
                $ORACLE_BASE/diag/product_type/product_id/instance_id
      
     Se por exemplo, você quiser procurar os dados de diagnóstico de uma instância de BD chamada PROD, dentro do ADR, eles serão encontrados em $ORACLE_BASE/diag/rdbms/PROD/PROD, onde o primeiro valor PROD refere-se ao nome do BD e o segundo refere-se ao nome da instância. A pasta $ORACLE_BASE/diag/rdbms/PROD/PROD é o ADR Home deste BD. Este formato de armazenamento permite contemplar o armazenamento de arquivos de diagnóstico centralizado de instâncias em RAC (Real Application Cluster). Dentro do ADR Home podemos encontrar os seguintes subdiretórios:
          - alert: Armazena o log de alerta em formato XML;
          - hm: Armazena os relatório do novo recurso chamado Health Monitor;
          - incident: Contém os relatórios de incidentes da instância;
          - trace: Contém o log de alerta em formato texto.
 

Imagem 01 - Representação gráfica da estrutura de pastas do ADR


     Para verificar o caminho físico e mais detalhes sobre o ADR Home em uma instância de BD, execute a consulta abaixo:
          SELECT * FROM V$DIAG_INFO;
        
     Uma mudança bastante útil, é que, além do antigo arquivo alert_instance.log (em formato texto), no 11G existe o novo arquivo log.xml (formato XML), que fornece dados à visão X$DBGALERTEXT. Segue abaixo um exemplo de consulta à visão X$DBGALERTEXT:
          SELECT    ORIGINATING_TIMESTAMP, message_text 
          FROM       X$DBGALERTEXT ORDER BY 1 DESC;

     Ainda acho mais fácil encontrar problemas no antigo alert_instance.log (localizado na pasta $ORACLE_BASE/diag/rdbms/PROD/PROD/trace), mas a visão X$DBGALERTEXT é muito útil para fazer consultas complexas no arquivo de alertas. Se você quiser pesquisar, por exemplo, a quantidade de deadlocks por mês que ocorreram no BD, execute a consulta abaixo (obter o mesmo resultado no arquivo texto  alert_instance.log é bem mais complicado):

     SELECT           TO_CHAR(ORIGINATING_TIMESTAMP,'yyyy/mm') DATA, 
                               count(1)
      FROM             X$DBGALERTEXT 
      WHERE          MESSAGE_TEXT LIKE '%Deadlock%'
      GROUP BY    TO_CHAR(ORIGINATING_TIMESTAMP,'yyyy/mm')
      ORDER BY    1 DESC;
       
     Os parâmetros BACKGROUND_DUMP_DEST USER_DUMP_DEST que eram utilizados até a versão 10G estão obsoletos no 11G. Os arquivos que ficavam armazenados nas pastas indicadas nos valores destes parâmetros, localizam-se agora em subdiretórios do ADR Home (especificamente, a pasta TRACE).
   
  
Por hoje é só!
  
[]s
  
  
Referências:
   http://www.dba-oracle.com/oracle11g/oracle_11g_diagnostic_dest_tips.htm
   OCP Oracle Database 11g: Novos Recursos para Administradores (Guia do exame 1Z0-050), Oracle Press, Sam Alapati

  

12 comentários:

  1. Parabéns Fábio,

    Excelente post, essa view eu não conhecia, apesar de saber da nova estrutura dos arquivos para arquitetura 11g.

    Abraços,

    ResponderExcluir
  2. No Oracle 11g pode ser utilizado a ferramenta adrci. Com a ferramenta é possível visualizar o alert do oracle com o comando SHOW ALERT e ainda é possível visualizar alguns comandos com a opção HELP.

    -- No linux: $ adrci

    ResponderExcluir
    Respostas
    1. Perfeito Rafael! Eu não costumo utilizar o ADRCI, mas ele é mais uma opção para analisar os alertas.

      []s

      Excluir
  3. Fabio,

    A matéria é muito boa, mas não estou conseguindo executar essa cosulta no Oracle 11g r2. Recebemo a mensagem de que a tabela ou view não existe. Alguma dica???

    ResponderExcluir
    Respostas
    1. Flavio, o usuário que vc está usando não deve ter privilégios para consultar as visões mencionadas neste artigo.

      Entre com um usuário que tenha privilégios de DBA ou peça ao seu DBA para ele te dar privilégios de consulta nelas!

      []s

      Excluir
  4. Fábio, parabéns pelo o artigo, me ajudou muito.
    Fábio, tenho uma duvida, se você puder me ajudar, ficarei agradecida:
    Simulei um erro de deadlock, porém não ficou registrado no alert.log, somente no arquivo trace, um erro de deadlock somente é registrado no arquivo de trace? assim, ao fazer o select acima na X$DBGALERTEXT, não é apresentado nada.
    Outra duvida: conectado com o usuário sys, digitando um desc neste objeto, o Oracle apresenta as colunas dessa tabela, porém ao digitar o comando conectado com o usuário sys select * from dba_objects where object_name like '%X$DBGALERTEXT%', não aparece a tabela, onde busco a informação dessa tabela?
    Muito obrigada.

    ResponderExcluir
    Respostas
    1. Priscila, obrigado pelos comentários. Qto aos deadlocks, eles são registrados sim no alert.log do Oracle 11G ou superior, mas não me lembro se era registrado em versões anteriores. Qual a versão do seu BD (fazer SELECT na visão V$VERSION)?


      Para consultar a visão X$DBGALERTEXT é necessário ter o componente XML DB instalado. Leia o post do link http://abcdba.com/abcdbaserverinstallguideshowtoinstalloracle11gxmldb e veja se o seu problema não é por causa da ausência deste componente.

      []s

      Excluir
  5. Olá Fabio, obrigada pela a resposta!
    A minha versão é 11.2.0.2.0, fiz o teste de deadlock e no sqlplus, o erro aparece, e no alert.log, o erro nao aparece. Fiz o teste no X$DBGALERTEXT e apareceu outros erros, porém o de deadlock não aparece.

    ResponderExcluir
    Respostas
    1. Priscila, acabei de simular um deadlock em um BD de testes (11GR2) e encontrei o erro deadlock no alert.log com a seguinte descrição:

      ORA-00060: Deadlock detected. More info in file /ora00/app/oracle/product/diag/rdbms/orcl/orcl/trace/orcl_ora_883.trc

      Em um fórum da Oracle verifiquei que outros tiveram o mesmo problema: https://community.oracle.com/thread/3604982. Leia este link e veja se ele te ajuda.

      []s

      Excluir
  6. Muito legal este post. Mudei a pouco da versão 10g para 11.2.0.4, e percebi uma incidência muito grande desses arquivos de trace. De um dia para o outro diversos apareciam, mas agora já me situei melhor. Agora no alert aparece a todo momento o erro TNS-12535 / TNS-00505 e não consegui chegar a conclusões sobre isso, inclusive já alterei no meu SQLNET.ora o parâmetro SQLNET.EXPIRE_TIME=10,
    e continua aparecendo esses erros.

    ResponderExcluir
    Respostas
    1. Jorge, sugiro a leitura do link http://dbaforums.org/oracle/index.php?showtopic=22440.

      []s

      Excluir