Oracle.ManagedDataAccess 連接報錯ORA-03135: Connection lost contact


.net core 

Oracle.ManagedDataAccess.Client.OracleException:“ORA-03135: Connection lost contact”

連接oracle 報錯問題

在使用一段時間不操作系統后,后台報ORA-03135: Connection lost contact 錯誤,

發生這種情況的原因是您的代碼請求從Oracle連接池進行連接,並且連接池將斷開連接/過時的連接返回到Oracle DB。

ODP.NET本身不會測試發送給客戶端的連接的連接狀態

1、為了安全起見,在執行Connection.Open()時,請檢查從池接獲取的連接是否可用,自己先打開驗證一下

1 if (connection.State == System.Data.ConnectionState.Closed)
2 {
3         connection.Open();
4 }
5 else if (connection.State == System.Data.ConnectionState.Broken)
6 {
7          connection.Close();
8          connection.Open();
9 }

 

2、通過設置連接字符串:Validate Connection = true 讓ODP.NET為您進行檢查

例如:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1522))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=dev)));User Id=AA;Password=AA;Validate Connection=true;

這兩種方法都會對性能產生影響,因為它們每次需要連接到數據庫時都會測試連接狀態。

3、判斷異常如果獲得ORA-03135,則請求新連接並像while循環一樣再次執行查詢。在最佳情況下,您可以使第一個連接有效,然后查詢將執行。最壞的情況是,池中的所有連接都是陳舊的,在這種情況下,代碼將被執行N次(其中N是連接池的大小)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM