Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle.DataAccess.Client.OracleException ORA-03135:Verbindungsverlust Kontakt

Dies geschieht, weil Ihr Code eine Verbindung vom Oracle-Verbindungspool anfordert und der Verbindungspool eine getrennte / veraltete Verbindung an die Oracle-Datenbank zurückgibt. ODP.NET selbst testet den Verbindungsstatus der an den Client gesendeten Verbindung nicht.

Überprüfen Sie also sicherheitshalber entweder den connection status == Open für die vom Pool empfangene Verbindung, wenn Sie Connection.Open()

ausführen

ODER

lassen Sie ODP.NET die Überprüfung für Sie durchführen, indem Sie Validate Connection = true setzen in Ihrer Verbindungszeichenfolge in web.config.

Beide Methoden wirken sich auf die Leistung aus, da sie den Verbindungsstatus jedes Mal testen, wenn Sie eine Verbindung zur Datenbank herstellen müssen.

Eine dritte Option, die ich verwende, ist die Verwendung von Ausnahmen. Seien Sie zunächst optimistisch und verwenden Sie die gerade Verbindung, die vom Verbindungspool zurückgegeben wird. Wenn Sie ein ORA - 3135 erhalten, fordern Sie eine neue Verbindung an und führen Sie Ihre Abfrage erneut wie eine While-Schleife aus. Im besten Fall erhalten Sie Ihre erste Verbindung als gültig und Ihre Abfrage wird ausgeführt. Im schlimmsten Fall sind alle Verbindungen in Ihrem Pool veraltet. In diesem Fall wird der Code N Mal ausgeführt (wobei N die Größe des Verbindungspools ist).