Това се случва, защото вашият код изисква връзка от пула за връзки на Oracle и пулът за връзки връща прекъсната / остаряла връзка към Oracle DB. ODP.NET сам по себе си не тества състоянието на връзката на връзката, изпратена до клиента.
Така че, за да сте в безопасност, или проверете connection status == Open
за връзката, получена от пула, когато правите Connection.Open()
ИЛИ
оставете ODP.NET да извърши проверката вместо вас, като зададете Validate Connection = true
във вашия низ за връзка в web.config.
И двата метода оказват влияние върху производителността, тъй като тестват състоянието на връзката всеки път, когато трябва да се свържете с базата данни.
Третата опция, която използвам, е използването на изключения. Първо бъдете оптимисти и използвайте дори връзката, която се връща от пула за връзки. Ако получите ORA - 3135, тогава поискайте нова връзка и изпълнете заявката си отново като while цикъл. В най-добрия случай можете да получите първата си връзка като валидна и вашата заявка ще се изпълни. В най-лошия случай всички връзки във вашия пул са остарели, в който случай кодът ще бъде изпълнен N пъти (където N е размерът на пула от връзки).