domingo, 1 de setembro de 2013

Como ler o “alert.log” diretamente do SQL*Plus


Apartir da versão 11g do Oracle é possível acessar as mensagens do “alert.log” da base de dados sem a necessidade de acessar o arquivo através do sistema operacional.


Em instalações “default” o arquivo “alert.log” fica localizado em : [$ORACLE_BASE/diag/rdbms/{DB_UNIQUE_NAME}/{SID}/alert/log_XX.xml].


Onde:

ORACLE_BASE

Diretório base da instalação do software Oracle;

DB_UNIQUE_NAME

Nome do banco de dados do banco;

SID

Nome da instância no servidor (em configurações RAC esse nome varia);

XX

Nome da instância para identificar o nome do arquivo de “alert.log”.


Porém é possível acessar as informações do arquivo de “alert.log” diretamente da base de dados via SQL*Plus.

Para isso basta acessar as informações contidas na visão X$DBGALERTEXT, abaixo pode-se ver as colunas desta visão.

SQL> desc X$DBGALERTEXT

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 ADDR                                               RAW(8)

 INDX                                               NUMBER

 INST_ID                                            NUMBER

 ORIGINATING_TIMESTAMP                              TIMESTAMP(3) WITH TIME ZONE

 NORMALIZED_TIMESTAMP                               TIMESTAMP(3) WITH TIME ZONE

 ORGANIZATION_ID                                    VARCHAR2(64)

 COMPONENT_ID                                       VARCHAR2(64)

 HOST_ID                                            VARCHAR2(64)

 HOST_ADDRESS                                       VARCHAR2(46)

 MESSAGE_TYPE                                       NUMBER

 MESSAGE_LEVEL                                      NUMBER

 MESSAGE_ID                                         VARCHAR2(64)

 MESSAGE_GROUP                                      VARCHAR2(64)

 CLIENT_ID                                          VARCHAR2(64)

 MODULE_ID                                          VARCHAR2(64)

 PROCESS_ID                                         VARCHAR2(32)

 THREAD_ID                                          VARCHAR2(64)

 USER_ID                                            VARCHAR2(64)

 INSTANCE_ID                                        VARCHAR2(64)

 DETAILED_LOCATION                                  VARCHAR2(160)

 PROBLEM_KEY                                        VARCHAR2(64)

 UPSTREAM_COMP_ID                                   VARCHAR2(100)

 DOWNSTREAM_COMP_ID                                 VARCHAR2(100)

 EXECUTION_CONTEXT_ID                               VARCHAR2(100)

 EXECUTION_CONTEXT_SEQUENCE                         NUMBER

 ERROR_INSTANCE_ID                                  NUMBER

 ERROR_INSTANCE_SEQUENCE                            NUMBER

 VERSION                                            NUMBER

 MESSAGE_TEXT                                       VARCHAR2(2048)

 MESSAGE_ARGUMENTS                                  VARCHAR2(128)

 SUPPLEMENTAL_ATTRIBUTES                            VARCHAR2(128)

 SUPPLEMENTAL_DETAILS                               VARCHAR2(128)

 PARTITION                                          NUMBER

 RECORD_ID                                          NUMBER

 

 

Para verificar as informações de alerta do banco pode-se executar a consulta abaixo:


SET LINESIZE 160 PAGESIZE 200
COL ORIGINATING_TIMESTAMP FOR A20 HEAD DATA
COL MESSAGE_TEXT FOR A120 HEAD MENSAGEM

SELECT TO_CHAR(ORIGINATING_TIMESTAMP,'DD.MM.YYYY HH24:MI:SS') DATA,
       MESSAGE_TEXT
  FROM X$DBGALERTEXT;

Caso queira verificar somente as mensagens de erro pode-se utilizar a consulta abaixo:

SET LINESIZE 160 PAGESIZE 200
COL ORIGINATING_TIMESTAMP FOR A20 HEAD DATA
COL MESSAGE_TEXT FOR A120 HEAD MENSAGEM

SELECT DISTINCT TO_CHAR(ORIGINATING_TIMESTAMP,'DD.MM.YYYY HH24:MI:SS') DATA,
                MESSAGE_TEXT
  FROM X$DBGALERTEXT
 WHERE ORIGINATING_TIMESTAMP > SYSDATE-2
   AND (MESSAGE_TEXT = 'ORA-00600' OR MESSAGE_TEXT LIKE '%FATAL%');


Referência: Oracle® Database Administrator´s Guide 11gR2 (11.2)




MSc. Rubens Oliveira
DBA Oracle Consultor