2011-02-01 11 views
5

Ho appena avuto il mio peggior incubo di manutenzione: un errore silenzioso.Oracle Odp.Net errore non segnalato sulla chiamata alla procedura nel pacchetto non valido

Stavo chiamando una procedura utilizzando Odp.Net all'interno di un pacchetto personalizzato e la chiamata alla procedura ha avuto esito negativo in modo silenzioso senza alcuna eccezione generata (verificata utilizzando sia il debug passo dopo passo che una clausola catch all). Dopo molte ricerche ho notato che il pacchetto è stato invalidato (qualche contrattempo sul server), dopo aver ricompilato il pacchetto tutto era tornato alla normalità (il codice di chiamata era corretto e non modificato).

Poiché è davvero facile invalidare un pacchetto accidentalmente in Oracle, devo rilevare questo tipo di errore, se non altro per registrarli per il debug.

Con MS System.Data.OracleClient è stato lanciato un OracleException in questo caso, esiste un modo per ottenere un comportamento simile con Oracle.DataAccess di Oracle? Qualche tipo di parametro sqlnet.ora? Non ho trovato nessun problema simile ovunque sulla rete.

utilizzando il server Oracle11R2, l'ultimo client Oracle Win32. .Net3.5.

+0

Michel, non sono sicuro che ti piacerà questo, ma io uso odp.net e se provo a chiamare un pacchetto non valido ottengo eccezioni sollevate - l'eccezione che vedo in .net è fedele al eccezione in Oracle. Le procedure memorizzate che chiamiamo avranno quasi sempre un parametro out, non so se ciò potrebbe fare la differenza (nel senso che potrebbe costringere odp.net a fare un po 'di post-elaborazione, che potrebbe far sì che lanci l'eccezione) – PeteH

risposta

0

Sono problemi del fornitore. Ho cambiato ODP.NET dopo un'eccezione simile. Ora sto usando dotConnect for Oracle e ti consiglio di fare la stessa cosa.

+0

purtroppo i miei clienti sono piuttosto prudenti. Conosco queste librerie, preferirei solo una soluzione Oracle pura. – Michel

2

Hai provato a abilitare il log di traccia odp.net?

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

Forse po 'di luce?

Problemi correlati