El trace graba cada error que devuelve una llamada, incluso los que el PL/SQL trató y la aplicación nunca vio. El hallazgo cuenta esos errores y lleva a la lista de códigos, con lo que significa cada uno y dónde apareció.
Síntomas
En el Diagnóstico aparece el hallazgo n errores de Oracle en el trace (ERROS_ORACLE), o 1 error de Oracle en el trace. El texto recuerda que el ORA-01403 (fin de datos) no entra en la cuenta y termina con Ver errores.
El hallazgo aparece cuando el trace tiene al menos una línea ERROR o PARSE ERROR con un código distinto de ORA-01403. El número es la suma de las ocurrencias de todos los códigos, menos el 1403. La gravedad es siempre alta, incluso con un solo error, y el hallazgo no muestra porcentaje del tiempo total: no mide tiempo, pide que usted compruebe si el error es esperable.
Cuando el único código del trace es el ORA-01403, el hallazgo es otro: ORA-01403 (fin de datos) en el trace.
Causa
- La línea
ERRORregistra el error devuelto por una llamada de un cursor, como uninsertque violó la clave o unfetchcancelado por el cliente. - La línea
PARSE ERRORregistra un SQL que no compiló (sintaxis, objeto que no existe, falta de privilegio), con el texto del SQL justo debajo. - Los errores en SQL recursivo, dentro de PL/SQL o de un trigger, y los errores tratados en un bloque
exceptiontambién aparecen, aunque la aplicación nunca los vea.
Cada error cuesta el trabajo hecho hasta él y deshacer la sentencia. Cuando el error llega a la aplicación, la sesión además espera SQL*Net break/reset to client, de la clase Application (espera por bloqueo de otra sesión).
Solución
- Haga clic en Ver errores.
Resultado: una tarjeta por código, con Qué es, Cuándo aparece, Qué hacer y el enlace a la documentación de Oracle. Un código fuera del catálogo de la consola trae solo la nota Código fuera del catálogo de la consola. y el enlace.
- En Dónde apareció, revise Llamada, Sentencia, Prof., Ocurrencias, Primera vez y Línea de cada lugar del error.
- En la columna Prof., 0 significa que el error volvió a la aplicación; por encima de 0, que vino de SQL recursivo. En ese caso, compruebe si el PL/SQL trata el error o lo oculta con
when others. - Haga clic en la sentencia (#n) para abrir su detalle. En un
PARSE ERROR, la columna Sentencia muestra el texto del SQL que no compiló. - Corrija según la causa del código, empezando por los más comunes en un trace:
| Código | Qué suele ser |
|---|---|
| ORA-00001 | Clave única violada: secuencia atrasada respecto de los datos, carga procesada dos veces o dos sesiones insertando la misma clave. |
| ORA-00060 | Deadlock: vea deadlock entre sesiones. |
| ORA-00942, ORA-00904 | Tabla, vista o columna que no existe para el usuario, en general en PARSE ERROR: objeto eliminado, sinónimo o privilegio que falta, SQL mal armado. |
| ORA-01013 | El cliente canceló la llamada, en general por el tiempo límite del driver. Revise el plan y las esperas de la sentencia antes de aumentar el límite. |
| ORA-01722 | Número no válido: conversión implícita de texto a número en un filtro o en una inserción. |
| ORA-04068 | Estado del paquete descartado: el paquete se recompiló mientras la sesión lo usaba. |
Un error repetido muchas veces en la misma sentencia cuesta una ejecución en cada ocurrencia. El caso típico es el ORA-00001 en un bucle que inserta y trata la excepción: use merge en lugar de insertar y capturar el error.
En Dónde apareció, el lugar de un error en una variante de SQL que solo difiere en los literales apunta a la forma: la columna Sentencia trae el número y el texto de la forma, con la etiqueta N variantes, y el enlace abre su detalle. El PARSE ERROR, que no tiene cursor, sigue identificado por el texto del SQL que falló.
Cómo confirmar
- Corrija la causa del código que más aparece.
- Active el trace de la misma operación (activar el trace con DBMS_MONITOR).
- Envíe el archivo nuevo y abra el informe.
- Compare el número en el título del hallazgo y las ocurrencias de cada código en Errores.
Resultado: el código corregido desaparece de la sección Errores. El hallazgo desaparece cuando en el trace queda, como mucho, el ORA-01403.
En el informe
El informe de ejemplo no tiene errores, y la sección Errores solo aparece cuando el trace tiene alguno.
- Errores: una tarjeta por código, con el significado, las causas, la acción y los lugares en Dónde apareció (errores).
- Diagnóstico: el hallazgo y el enlace Ver errores (Diagnóstico).
- Detalle de la sentencia: el cuadro Errores, en la parte superior, con cuántos errores tuvo la sentencia (detalle de la sentencia).
- Perfil del tiempo de respuesta: la espera
SQL*Net break/reset to client, cuando los errores llegan a la aplicación (perfil). - Deadlocks: en la tarjeta del ORA-00060, el enlace Ver el deadlock lleva al deadlock que generó el error (deadlocks).