.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是連接池的大小)