Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle.DataAccess.Client.OracleException ORA-03135:connessione interrotta

Succede perché il tuo codice richiede una connessione dal pool di connessioni Oracle e il pool di connessioni restituisce una connessione disconnessa/non aggiornata al DB Oracle. ODP.NET stesso non verifica lo stato di connessione della connessione inviata al client.

Quindi, per sicurezza, controlla lo connection status == Open per la connessione ricevuta dal pool quando si esegue un Connection.Open()

O

lascia che ODP.NET faccia il controllo per te impostando Validate Connection = true nella stringa di connessione in web.config.

Entrambi questi metodi hanno un impatto sulle prestazioni poiché testano lo stato della connessione ogni volta che è necessario connettersi al database.

Una terza opzione che utilizzo è l'uso delle eccezioni. Per prima cosa sii ottimista e usa la connessione qualunque viene restituita dal pool di connessioni. Se ottieni un ORA - 3135, richiedi una nuova connessione ed esegui di nuovo la tua query come un ciclo while. Nel migliore dei casi, puoi ottenere la tua prima connessione come valida e la tua query verrà eseguita. Nel peggiore dei casi, tutte le connessioni nel tuo pool sono obsolete, nel qual caso il codice verrà eseguito N volte (dove N è la dimensione del pool di connessioni).