Điều này xảy ra vì mã của bạn yêu cầu kết nối từ Nhóm kết nối Oracle và nhóm kết nối trả về một kết nối đã ngắt / cũ cho Oracle DB. ODP.NET không tự kiểm tra trạng thái kết nối của kết nối được gửi đến máy khách.
Vì vậy, để an toàn, bạn kiểm tra connection status == Open
cho kết nối nhận được từ nhóm khi bạn thực hiện một Kết nối.Open ()
HOẶC
hãy để ODP.NET kiểm tra giúp bạn bằng cách đặt Validate Connection = true
trong chuỗi kết nối của bạn trong web.config.
Cả hai phương pháp này đều có tác động đến hiệu suất vì chúng kiểm tra trạng thái kết nối mỗi khi bạn cần kết nối với cơ sở dữ liệu.
Tùy chọn thứ ba mà tôi sử dụng là sử dụng các ngoại lệ. Đầu tiên, hãy lạc quan và sử dụng kết nối whateven được trả về từ nhóm kết nối. Nếu bạn nhận được ORA - 3135 thì hãy yêu cầu một kết nối mới và thực hiện lại truy vấn của bạn giống như một vòng lặp while. Trong trường hợp tốt nhất, bạn có thể lấy kết nối đầu tiên của mình là hợp lệ và truy vấn của bạn sẽ thực thi. Trong trường hợp xấu nhất, tất cả các kết nối trong nhóm của bạn đều cũ, trong trường hợp đó, mã sẽ được thực thi N lần (trong đó N là kích thước nhóm kết nối).