Cómo depurar en Oracle: procedimientos almacenados, paquetes, SQL Developer, TOAD y APEX

La depuración de procedimientos almacenados en Oracle puede ser un desafío, especialmente si se trata de lógica compleja, SQL dinámico o problemas de rendimiento. Sin embargo, existen algunas herramientas y técnicas que pueden ayudarle a identificar y corregir errores, optimizar el código y mejorar la productividad.

Una estrategia útil consiste en dividir un procedimiento complejo en partes más pequeñas. También es importante que el entorno de pruebas sea lo más parecido posible al entorno de producción.

Herramientas principales para depurar en Oracle

Las herramientas y técnicas de depuración pueden utilizarse para comprobar el flujo de ejecución, inspeccionar variables, localizar errores y analizar el rendimiento del código.

  • SQL Developer: entorno integrado para crear, editar, probar y depurar procedimientos almacenados.
  • TOAD: herramienta que permite compilar paquetes con información de depuración, establecer puntos de interrupción y ejecutar procedimientos.
  • Oracle Application Express: plataforma que proporciona mecanismos específicos para depurar solicitudes, páginas y procesos de una aplicación.
  • APEX_DEBUG: utilidad para registrar mensajes de depuración con distintos niveles de importancia.
  • DBMS_ASSERT: paquete para validar parámetros de entrada y salida.
  • DBMS_PROFILER: paquete para medir el tiempo de ejecución y la frecuencia de cada línea de código.
  • DBMS_HPROF: paquete para generar un perfil jerárquico del uso de CPU y memoria.

Depuración de procedimientos almacenados con SQL Developer

SQL Developer es un entorno de desarrollo gratuito e integrado (IDE) para bases de datos Oracle. Proporciona una interfaz gráfica de usuario (GUI) para crear, editar, probar y depurar procedimientos almacenados.

Puede utilizar puntos de interrupción, observaciones, comandos paso adentro, paso a paso y paso a paso para controlar el flujo de ejecución e inspeccionar los valores de variables y parámetros.

Puntos de interrupción y control de la ejecución

Los puntos de interrupción permiten detener temporalmente la ejecución en líneas concretas del procedimiento. Cuando la ejecución se detiene, es posible revisar el estado de las variables y los parámetros, así como avanzar de forma controlada por las instrucciones.

El uso de observaciones permite inspeccionar valores relevantes durante la ejecución. Los comandos paso adentro, paso a paso y paso a paso ayudan a controlar el flujo y a determinar en qué instrucción aparece un comportamiento inesperado.

SQL Developer depuración procedimiento Oracle

Pruebas de procedimientos almacenados

TESTING es el proceso de comprobar que los procedimientos almacenados funcionan según lo esperado y cumplen los requisitos funcionales y no funcionales.

Puede utilizar el paquete DBMS_ASSERT para validar los parámetros de entrada y salida de los procedimientos almacenados, el paquete DBMS_PROFILER para medir el tiempo de ejecución y la frecuencia de cada línea de código, o el paquete DBMS_HPROF para generar un perfil jerárquico del uso de CPU y memoria.

División de procedimientos complejos

Una técnica útil consiste en dividir un procedimiento complejo en partes más pequeñas. One thing I have found helpful is to break down a complex procedure into smaller chunks.

Esta forma de trabajo permite aislar cada bloque de lógica, comprobarlo por separado y localizar con mayor precisión la parte que produce el error.

Entorno de pruebas

Make sure your test environment is as close to production as possible.

La similitud entre ambos entornos facilita la reproducción de los problemas relacionados con datos, configuración, permisos, rendimiento y comportamiento de los procedimientos.

Depuración de paquetes con TOAD

Para depurar un paquete de base de datos con TOAD primero abrimos el buscador de objetos de la base de datos con Database-> Schema Browser.

  1. Elegimos paquetes (packages).
  2. Elegimos el paquete y procedimiento a ejecutar.
  3. Situados sobre el paquete a depurar, con el botón derecho del ratón pulsamos sobre el procedimiento y elegimos Compile-> Compile with Debug.
  4. Nos sale una pantalla en la que elegimos la primera opción Refresh Items One by One.
  5. Hecho esto nos colocamos sobre el procedimiento o función a depurar y hacemos doble click sobre él para abrirlo en el editor.

Establecer puntos de interrupción en TOAD

Ahora sobre el editor podemos colocarnos sobre una línea y con el botón derecho del ratón elegimos Debug-> Set Breakpoint para establecer sobre el código los puntos de ruptura que deseemos.

Los puntos de ruptura deben situarse en las líneas donde sea necesario comprobar el valor de las variables, el resultado de una condición o la entrada y salida de una sección de lógica.

Iniciar la ejecución de depuración

Para comenzar la depuración pulsamos sobre el botón con el triángulo verde que pone SQL.

Le decimos que sí a los mensajes que nos salgan hasta llegar a la pantalla para rellenar las variables.

Una vez introducidos los valores necesarios, la ejecución puede detenerse en los puntos de ruptura definidos previamente, lo que permite inspeccionar el procedimiento durante su ejecución.

TOAD puntos ruptura paquete Oracle

Depuración en Oracle Application Express

Pero en APEX no se realiza de la misma forma la depuración, por ello, en este artículo te voy a mostrar como depurar errores en APEX mientras desarrollamos y ante de empezar necesitamos conocer cómo habilitar o deshabilitar la funcionalidad de depuración.

Depurar en APEX no tiene por qué ser complicado. Con APEX_DEBUG, puedes desbloquear esta herramienta y convertirte en un maestro de la depuración.

Activar la depuración mediante la URL

La otra forma es configurar en la URL de APEX que la depuración esté en YES o LEVELn donde n puede estar entre 1 (más crítico) y 9 (menos críticos).

En este otro post te muestro cómo puedes activar el modo de depuración nivel 9 en APEX (debug/trace).

ConfiguraciónDescripción
YESModo de depuración activado.
LEVELnEl nivel puede estar entre 1 (más crítico) y 9 (menos críticos).

Información registrada durante una solicitud

Cuando ejecutamos una aplicación en modo de depuración, Oracle Application Express escribe información acerca de cómo se procesa cada solicitud de página en una tabla.

La información registrada permite examinar las operaciones realizadas durante la ejecución de la solicitud y localizar la fase en la que se produce el comportamiento inesperado.

Cómo interpretar la depuración de una página APEX

Para ver la información detallada de depuración de una determinada sesión hacemos clic en el número de sesión que queremos visualizar en el View Identifier.

Para ver la información de una sesión determinada, hacemos clic en el número de la sesión que deseamos ver, que se encuentra en la columna del Identificador de Vista.

Aparece la página de depuración.

La página de depuración muestra la información en dos formatos, por un lado muestra un gráfico de histogramas en la parte superior de la página. La segunda parte muestra un reporte con el detalle de lo que fue ejecutado durante la fase de ejecución.

  • El gráfico de histogramas aparece en la parte superior de la página.
  • El reporte muestra el detalle de lo que fue ejecutado durante la fase de ejecución.
  • El Identificador de Vista permite seleccionar una sesión determinada.
APEX página depuración histograma sesión

Fases de procesamiento de una página

Cuando se crea una aplicación con el Creador de Aplicaciones, nosotros podemos enlazar páginas entre sí mediante pestañas, botones o enlaces de hipertexto.

Cada página puede tener botones y elementos y puede incluir además lógica de la aplicación.

El motor de Application Express dinámicamente presenta y procesa las páginas basadas en los datos almacenados en las tablas de la base de datos Oracle.

Para ver una versión de la presentación (o renderización) de una página de nuestra aplicación, nosotros lo solicitamos desde el motor de APEX.

Mostrar la Página es el proceso de renderización o presentación de página.

Aceptar Página realiza el procesamiento de página.

Cuando se solicita una página utilizando una dirección URL, el motor está trabajando en Mostrar la Página.

La distinción entre la presentación y el procesamiento permite determinar si el problema aparece durante la renderización de la página o durante la ejecución de la lógica asociada a su procesamiento.

APEX_DEBUG y niveles de mensajes

¿Alguna vez te has frustrado cuando tratas de encontrar un error en tu aplicación? Bueno, no estás solo.

Con APEX_DEBUG, puedes registrar mensajes en diferentes niveles (INFO, WARN, ERROR) y ver exactamente qué está sucediendo en tu aplicación.

NivelUso indicado
INFORegistrar información sobre la ejecución.
WARNRegistrar situaciones que pueden causar problemas.
ERRORRegistrar errores de la aplicación.

Este es el modo estándar.

¿Cuándo usarlo?Cuando necesitas marcar un error crítico que podría destruir tu puesto laboral.

A veces, algo no está del todo mal, pero tiene el potencial de causar problemas.

Uso práctico de los mensajes

Los mensajes INFO pueden utilizarse para registrar el avance de una operación y comprobar qué partes del proceso se han ejecutado.

Los mensajes WARN permiten señalar situaciones que no detienen necesariamente la ejecución, pero que tienen el potencial de causar problemas.

Los mensajes ERROR permiten identificar fallos que requieren atención durante la ejecución de la aplicación.

Gestión de los datos de depuración en APEX

En esta forma de ver la información no tiene el gráfico de histograma, pero lo que sí tiene es el botón “Page Debug Messages”, este botón permite tanto al administrador de APEX como al desarrollador purgar la data de la depuración para la presente aplicación según ciertos criterios.

El botón “Page Debug Messages” permite gestionar la información registrada para la aplicación y purgar la data de la depuración según ciertos criterios.

Esta opción resulta útil cuando se necesita limitar la cantidad de información almacenada o eliminar registros de depuración que ya no son necesarios.

Secuencia recomendada para localizar errores

  1. Comprobar que el procedimiento o paquete se puede compilar correctamente.
  2. Dividir la lógica compleja en partes más pequeñas.
  3. Preparar un entorno de pruebas lo más parecido posible a producción.
  4. Establecer puntos de interrupción en las líneas relevantes.
  5. Ejecutar el procedimiento con valores de entrada controlados.
  6. Inspeccionar los valores de variables y parámetros durante la ejecución.
  7. Medir el tiempo de ejecución y la frecuencia de las líneas cuando exista un problema de rendimiento.
  8. En APEX, activar la depuración mediante YES o LEVELn.
  9. Seleccionar la sesión correspondiente mediante el View Identifier.
  10. Revisar el histograma y el reporte detallado de ejecución.
  11. Registrar mensajes con APEX_DEBUG utilizando los niveles INFO, WARN y ERROR.
  12. Purgar los datos de depuración mediante “Page Debug Messages” cuando sea necesario.

tags: #como #depurar #en #oracle

Publicaciones populares: