Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Área de Tecnologías de la Información y las Comunicaciones Aplicadas Universidad de Murcia
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
ATICA arrow Consultoria arrow DBconnector arrow DBA - Errores ORA-600 y ORA-7445 (buscar sentencia SQL y parámetros en fichero de traza)
23.05.2012
 
 
DBA - Errores ORA-600 y ORA-7445 (buscar sentencia SQL y parámetros en fichero de traza) Imprimir E-mail

Oracle suele crear un fichero de traza cuando se produce un error ORA-07445 (coredump) u ORA-00600 (error no controlado, posible bug). Vamos a ver como encontrar la sentencia SQL que provocó el error, así como los parámetros con los que se lanzó la citada sentencia SQL.

Siguiendo las indicaciones de la nota técnica de Oracle 154170.1, tenemos que hacer los siguiente:

  • Buscar cadena "Cursor Dump".

  • Quedarse con el nº del "Current cursor".

  • Buscar  "Cursor#n", donde "n" es el nº encontrado en el punto anterior.

  • Unas líneas más abajo, la línea "sqltxt" muestra la sentencia SQL.

  • Y para encontrar los valores de las variables bind, hay que ir buscando "bind#0", "bind#1", etc.

De este modo, obteniendo la sentencia SQL y el valor de sus parámetros se podría volver a ejecutar la sentencia que provocó el error.

En los "Enlaces de interés" (más abajo), están las urls de acceso a las notas técnicas de la Web de Soporte Oficial de Oracle, que explican lo que son los errores ORA-00600 y ORA-07445, así como un formulario que permite buscar si hay bugs registrados relacionados con dichos errores, cuando te encuentres con uno.

Ejemplo:

Veamos un ejemplo de un fichero de traza generado por un error ORA-07445 al lanzar un job:

/u01/app/oracle/admin/VENUS/bdump/venus_j000_8990958.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit

...

ORA-07445: exception encountered: core dump [] [] [] [] [] []

...

******************** Session
Cursor Dump **********************
Current cursor: 7, pgadep: 1
Open cursors(pls, sys, hwm, max): 33(22, 11, 64, 800)

...

----------------------------------------
Cursor#7(1104419c0) state=BOUND curiob=11047e4b8
 curflg=d fl2=0 par=0 ses=700000688a93ff8
 sqltxt(7000003c83d6628)=DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate;  broken BOOLEAN := FALSE; BEGIN PK_MAILS_PENDIENTES_U.P_ENVIA_MAILS; :mydate := next_date; IF broken THEN :b := 1; ELSE :b := 0; END IF; END;

...

 Bind#0
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  oacflg=00 fl2=0001 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=1104cf190  bln=22  avl=04  flg=05
  value=277462
 Bind#1
  oacdty=12 mxl=07(07) mxlc=00 mal=00 scl=00 pre=00
  oacflg=13 fl2=0001 frm=00 csi=00 siz=8 off=0
  kxsbbbfp=fffffffffffbd4c  bln=07  avl=07  flg=09
  value="3/21/2011 0:55:24"

...

Por tanto los valores de los parámetros :job y :mydate son "277462" y "3/21/2011 0:55:24" respectivamente.

En los enlaces de más abajo, hay uno muy interesante de la Web Oficial de Soporte de Oracle, que muestra un formulario para buscar posibles bugs que puedan ser la causa del error ORA-00600 u ORA-07445 q te está sucediendo. Dicha búsqueda se puede hacer incluso "copiando/pegando" la sección "Call Stack Trace" del fichero de traza correspondiente.

Enlaces de interés:

Última modificación ( 26.08.2011 )
 
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Volver al incio del documento Volver al inicio del documento
Área de Tecnologías de la Información y las Comunicaciones Aplicadas