domingo, 20 de febrero de 2011

Oracle, Where is the bug ?

Existen ocasiones donde nos encontramos con bugs dentro de nuestros programas y no podemos mostrar la salida de nuestro programa para ir dándonos una idea de donde ocurre el error, para ese tipo de situaciones Oracle nos brinda herramientas como el trace y a este aplicarle el famoso tkprof sin embargo no siempre tenemos a la mano el acceso al servidor por shell o simplemente no tenemos a un dba de cabecera ( yo sigo sin tener el mio y eso que en este proyecto hay 2 ) bueno pues para estas ocaciones lo que yo uso normalmente es un procedimiento que escribe en una tabla y me va dejando una pista te lo que ocurre en mi código.

El script de instalación es el siguiente:

CREATE SEQUENCE XXX_DEBUG_S;

CREATE TABLE "XXX_DEBUG_TAB"

( "ID" NUMBER,

"IDENTIFIER" VARCHAR2(50),

"CHAR_TIME" VARCHAR2(50),

"TEXT" VARCHAR2(4000) );

CREATE OR REPLACE PROCEDURE "XXX_DEBUG_TXT" (pIdentifier In Varchar2, pText In Varchar2) Is pragma autonomous_transaction;

Begin Insert into XXX_debug_tab

(id, identifier, char_time, text)

values

(XXX_DEBUG_S.nextval, pIdentifier, to_char(SYSTIMESTAMP, 'DD/MM/YYYY HH24:MI:SS FF6'), pText);

commit;

End; /


Ahora y esto para que nos sirve, pues es muy sencillo el procedimiento de arriba se encarga de insertar a una tabla cada ves que lo llaman, algo asi:

begin

XXX_DEBUG_TXT('DEPURA','AQUI ESTOY:'||VAR1);

end;


Que tiene esto de practico? Pues que lo puedes meter en cualquier parte de tu código y no altera tu procesamiento natural, ya que al utilizar la sentencia "pragma autonomous_transaction" este procedimiento se ejecuta dentro de una sesión diferente y su commit no afecta tu programa natural permitiendo que tu transacción continúe como si nada hubiese pasado y tu puedes seguir monitoreando desde otra sesión.

Y si ocurre algun error tu puedes ir guardando tus variables o datos que te puedan ayudar a identificar los bugs de tus programas o aquellos programas que te toque revisar.

Espero les sea útil y felices compilaciones ¡¡¡




No hay comentarios:

Publicar un comentario