2011-02-01 20 views
5

Acabo de recibir mi peor pesadilla de mantenimiento: un error silencioso.Oracle Odp.Net error no registrado en la llamada al procedimiento en el paquete no válido

Estaba llamando a un procedimiento utilizando Odp.Net dentro de un paquete personalizado, y la llamada de procedimiento falló silenciosamente sin ninguna excepción (verificada mediante una depuración paso a paso y una cláusula catch all). Después de mucha búsqueda, noté que el paquete se había invalidado (algunos errores en el servidor), después de recompilar el paquete, todo volvió a la normalidad (el código de la llamada era correcto y no se había modificado).

Dado que es realmente fácil invalidar un paquete accidentalmente en Oracle, necesito detectar este tipo de error, aunque solo sea para iniciar sesión en la depuración.

Con System.Data.OracleClient de MS se lanzó una OracleException en este caso, ¿hay alguna manera de obtener un comportamiento similar con Oracle.DataAccess de Oracle? Algún tipo de parámetro sqlnet.ora? No encontré ningún problema similar en ninguna parte de la red.

utilizando el servidor Oracle11R2, el último cliente Oracle Win32. .Net3.5.

+0

Michel, no estoy seguro de que te guste esto pero utilizo odp.net y si trato de llamar a un paquete inválido obtengo excepciones, la excepción que veo en .net es fiel a la excepción en Oracle. Los procedimientos almacenados que llamamos casi siempre tienen un parámetro de salida, no sé si eso marcaría una diferencia (en el sentido de que forzaría a odp.net a hacer un postprocesamiento, lo que podría hacer que lanzara la excepción) – PeteH

Respuesta

0

Es un problema del proveedor. Cambié ODP.NET después de una excepción similar. Ahora estoy usando dotConnect for Oracle y te recomiendo que hagas lo mismo.

+0

lamentablemente mis clientes son bastante conservadores. Conozco estas bibliotecas, preferiría una solución de Oracle pura. – Michel

2

¿Ha intentado activar el registro de seguimiento de odp.net?

<oracle.dataaccess.client> 
    <settings> 
    <add name="TraceFileName" value="c:\odpnet1.trc"/> 
    <add name="TraceLevel" value="63"/> 
</settings> 
</oracle.dataaccess.client> 

Tal vez arrojará algo de luz?

Cuestiones relacionadas