Het gebeurt omdat uw code een verbinding aanvraagt van de Oracle-verbindingspool en de verbindingspool een verbroken/verouderde verbinding naar de Oracle DB retourneert. ODP.NET test zelf niet de verbindingsstatus van de verbinding die naar de client is verzonden.
Dus om veilig te zijn, controleert u ofwel de connection status == Open
voor de verbinding ontvangen van de pool wanneer u een Connection.Open()
OF
laat ODP.NET de controle voor u doen door Validate Connection = true
in te stellen in uw verbindingsreeks in web.config.
Beide methoden hebben een impact op de prestaties, omdat ze de verbindingsstatus testen elke keer dat u verbinding moet maken met de database.
Een derde optie die ik gebruik is het gebruik van uitzonderingen. Wees eerst optimistisch en gebruik de verbinding die wordt geretourneerd vanuit de verbindingspool. Als je een ORA - 3135 krijgt, vraag dan een nieuwe verbinding aan en voer je query opnieuw uit als een while-lus. In het beste geval kunt u uw eerste verbinding als geldig krijgen en wordt uw zoekopdracht uitgevoerd. In het ergste geval zijn alle verbindingen in uw pool verouderd, in welk geval de code N keer wordt uitgevoerd (waarbij N de grootte van de verbindingspool is).