sábado, 20 de agosto de 2011

Base de datos Oracle 11g: nueva funcionalidad errorlogging del SQL*Plus

Gato durmiendo sobre teclado de programación PL/SQLHasta la versión de la base de datos Oracle 10g Release 2 no era posible capturar en SQL*Plus los errores que se generan cuando escribíamos incorrectamente una sentencia SQL. Es decir, los errores conocidos como SP2 no podían ser gestionados por las funcionalidades estándar del SQL*Plus OSERROR o SQLERROR. Esto era algo normal ya que los errores SP2 no son errores del tipo OS, como el típico error "unable to open spool file", ni tampoco son errores de tipo SQL o PLSQL, ya que la sentencia que hemos escrito incorrectamente en realidad no se trata de ningún comando SQL y nunca llegó a alcanzar la capa SQL o PL/SQL de la base de datos Oracle.

Para los que todavía estén un poco confundidos y aún no hayan identificado cuáles son los errores SQL de tipo SP2 os dejo el siguiente ejemplo:

SQL > SLECT * FROM empleados;
SP2-0734: unknown command beginning "SLECT * FR..." - 
rest of line ignored.



Una vez que ya he dejado claro cuales son los errores SP2, y después de remarcar que este tipo de errores no podían ser capturados en versiones de la base de datos Oracle anteriores a la 11g, sólo queda señalar que esto ha cambiado con la versión 11g de SQL*Plus al incluir la nueva funcionalidad errorlogging, una funcionalidad que se habilita mediante el siguiente comando SQL*Plus:

SQL > SET errorlogging ON

De esta manera en las versiones de la bases de datos Oracle 11g y superiores podremos guardar cualquier error, ya sea SQL, OS o SP2, en la tabla de logging denominada SPERRORLOG. Además, es posible marcar los errores con un identificador específico, de forma que sea mucho más sencillo encontrar nuestros registros de error propios. Por lo tanto, si durante la ejecución de un programa que utilice SQL*Plus se ha producido algún tipo de error, podremos, durante la misma sesión Oracle y utilizando sentencias SQL, chequear los errores que se han producido. Veamos un sencillo ejemplo:

SQL*Plus: Release 11.2.0.1.0 - 
Production on Mon Oct 18 12:55:41 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.1.7.4.0 - Production
With the Partitioning option
JServer Release 9.1.7.4.0 - Production

SQL > SET errorlogging ON
SQL > SLECT * FROM empleados;
SP2-0734: unknown command beginning "SLECT * FR..." - 
rest of line ignored.
SQL >
SQL > SELECT statement, message
  2   FROM sperrorlog;

STATEMENT     MESSAGE
————————————  ———————
SLECT * FROM  SP2-0734: unknown command beginning
empleados;    "SLECT * FR..." - rest of line ignored.

Como podeís observar en el ejemplo, hemos utilizado la funcionalidad errorlogging contra una versión de la base de datos 9i, esto ha sido posible gracias a que dicha funcionalidad es propia de la versión 11g de SQL*Plus, por lo tanto puede utilizarse con versiones antiguas de la base de datos Oracle siempre que la versión de SQL*Plus sea la 11g o superior.

0 comentarios:

Publicar un comentario