sql >> Databasteknik >  >> RDS >> Oracle

Oracle.DataAccess.Client.OracleException ORA-03135:anslutning förlorad kontakt

Det händer eftersom din kod begär en anslutning från Oracle Connection Pool och anslutningspoolen returnerar en frånkopplad/inaktuell anslutning till Oracle DB. ODP.NET testar inte själv anslutningsstatusen för anslutningen som skickas till klienten.

Så för säkerhets skull kontrollerar du antingen connection status == Open för anslutningen som tas emot från poolen när du gör en Connection.Open()

ELLER

låt ODP.NET göra kontrollen åt dig genom att ställa in Validate Connection = true i din anslutningssträng i web.config.

Båda dessa metoder har en inverkan på prestandan eftersom de testar anslutningsstatusen varje gång du behöver ansluta till databasen.

Ett tredje alternativ som jag använder är användningen av undantag. Var först optimistisk och använd den anslutning som returneras från anslutningspoolen. Om du får en ORA - 3135, begär då en ny anslutning och kör din fråga igen som en while-loop. I bästa fall kan du få din första anslutning som giltig och din fråga kommer att köras. I värsta fall är alla anslutningar i din pool inaktuella i vilket fall koden kommer att exekveras N gånger (där N är anslutningspoolens storlek).



  1. datetime2 vs smalldatetime i SQL Server:Vad är skillnaden?

  2. Spara utdata från sql-funktionen till csv-fil (COPY) med dynamiskt filnamn

  3. Hur man rensar alla cachade objekt i Oracle

  4. Kontrollera om databasen finns i PostgreSQL med hjälp av skal