domingo, 17 de julio de 2011

ADR - Un nuevo concepto para diagnosticar errores en 11g

Aqui de regreso con el blog, en 11g se introdujo un nuevo concepto para el repositorio de los archivos de diagnostico de la base de datos, llamado ADR (Automatic Diagnostic Repository por sus siglas en ingles) , anteriormente se utilizaban los parametros BACKGROUND_DUMP_DEST,CORE_DUMP_DEST y USER_DUMP_DEST , en estos lugares podiamos ver los archivos que nos ayudaban a hacer un diagnostico de errores de la base de datos. A partir de 11g, se introdujo la variable DIAGNOSTIC_DEST, en donde Oracle esta tratando de estandarizar la estructura de directorios para manejar los archivos relacionados a fallas y alertas. La estructura del repositorio ADR para la base de datos es de la siguiente manera:


Un cambio muy importante que se da en 11g es que el formato del archivo de alertas de la base de datos es en formato .xml, ya que lo puedes ahora visualizar de una mejor manera en OEM, pero tambien lo puedes encontrar en su formato anterior. Si quieres ver como tienes la estructura en tu base de datos, lo puedes hacer con el siguiente query

DBATEST> SELECT * FROM V$DIAG_INFO;

INST_ID NAME VALUE
---------- ------------------------------ ----------------------------------------------------------------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /mount/dump01/oracle/DBATEST
1 ADR Home /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST
1 Diag Trace /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/trace
1 Diag Alert /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/alert
1 Diag Incident /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/incident
1 Diag Cdump /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/cdump
1 Health Monitor /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/hm
1 Default Trace File /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/trace/DBATEST_ora_18035.trc
1 Active Problem Count 1
1 Active Incident Count 75

De la misma manera, Oracle trae ahora una herramienta muy util llamada adrci, esta herramienta te permite manejar el repositorio ADR,muy importante, es que antes de mandar a llamar a la herramienta, las variables de ambiente ORACLE_HOME,PATH y ADR_HOME esten bien iniciadas. Puedes ver el archivo de alertas de la base de datos de la siguiente manera:

adrci> SHOW ALERT -TAIL 5
2011-07-17 18:04:41.207000 -04:00
Archived Log entry 4735 added for thread 1 sequence 4735 ID 0xffffffffb7363f82 dest 1:
2011-07-17 21:00:49.339000 -04:00
Thread 1 advanced to log sequence 4737 (LGWR switch)
Current log# 3 seq# 4737 mem# 0: /mount/u01/oracle/DBATEST/log/redo03a.log
Current log# 3 seq# 4737 mem# 1: /mount/u01/oracle/DBATEST/log/redo03b.log
Archived Log entry 4736 added for thread 1 sequence 4736 ID 0xffffffffb7363f82 dest 1:

Pero algo que a mi me ha gustado mucho, es la manera en que puedes ver un incidente en esta herramienta

adrci> show incident

ADR Home = /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST:
*************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
-------------------- ----------------------------------------------------------- ----------------------------------------
3041 ORA 4031 2010-11-15 05:58:35.042000 -05:00
3105 ORA 4031 2010-11-15 05:58:35.272000 -05:00
3017 ORA 4031 2010-11-15 05:58:35.272000 -05:00
2873 ORA 4031 2010-11-15 05:58:35.279000 -05:00
3153 ORA 4031 2010-11-15 05:58:35.280000 -05:00
57051 ORA 4031 2011-06-26 23:15:13.983000 -04:00
57027 ORA 4031 2011-06-26 23:15:14.239000 -04:00
56707 ORA 4031 2011-06-26 23:15:28.575000 -04:00
57019 ORA 4031 2011-06-26 23:15:32.650000 -04:00
57052 ORA 4031 2011-06-26 23:15:39.050000 -04:00
10 rows fetched

Una vez que visualizas los errores, puedes ver el detalle de ellos, asi como el trace que se genero para ese error

adrci> SHOW INCIDENT -MODE DETAIL -P "INCIDENT_ID=57052"

ADR Home = /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST:
*************************************************************************

**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
INCIDENT_ID 57052
STATUS ready
CREATE_TIME 2011-06-26 23:15:39.050000 -04:00
.
.
.
KEY_NAME Client ProcId
KEY_VALUE oracle@localhost.13299_1
KEY_NAME SID
KEY_VALUE 151.3
OWNER_ID 1
INCIDENT_FILE /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/incident/incdir_57052/DBATEST_dw03_13299_i57052.trc
OWNER_ID 1
INCIDENT_FILE /mount/dump01/oracle/DBATEST/diag/rdbms/dbatest/DBATEST/trace/DBATEST_dw03_13299.trc
1 rows fetched

Esta herramienta te permite crear un paquete si asi lo requieres para enviar a Oracle, esto te evita el trabajo de andar buscando los archivos que necesitas enviar a MOS para crear un Servie Request

adrci> IPS PACK INCIDENT 57052 in '/mount/copy01';
Generated package 1 in file /mount/copy01/ORA4031_20110717222427_COM_1.zip, mode complete

Conclusion 
Espero que ahora que ya conociste la estructura y herramienta de adrci, la empieces a utilizar con mas frecuencia y sacarle todo el jugo que se pueda.