Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQLException:Vi phạm giao thức. Vấn đề về trình điều khiển JDBC của Oracle

Đối với những người dùng google tương lai phải truy cập trang này, đây là vấn đề chúng tôi gặp phải. Ngoại lệ vi phạm giao thức đã được ghi lại trên nhật ký ứng dụng và theo dõi Oracle.

Dấu vết Oracle

Đây là lỗi từ các tệp theo dõi oracle

--- PHÁT HIỆN VI PHẠM PROTOCOL ---

----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
        select xyz

Từ nhật ký ứng dụng

Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];

Dấu hiệu

Ngoại lệ này thỉnh thoảng xảy ra. Dấu vết ngăn xếp có sql khác nhau trong đó rất khó hiểu. Chạy sql với sql plus hoạt động tốt.

Nguyên nhân gốc rễ

Ngoại lệ được đưa ra khi trình điều khiển oracle đang cố gắng xuất dữ liệu CLOB. Điều này chỉ xảy ra với một số hồ sơ, không phải tất cả chúng. Dữ liệu như vậy là một tệp. Nhìn bằng mắt thường, chúng tôi không thể xác định được dữ liệu đó có gì sai.

Tại sao chúng tôi thấy lỗi trong nhật ký tiên tri?

Vì vậy, nếu đây là một lỗi của trình điều khiển, tại sao chúng ta lại thấy lỗi trong dấu vết oracle? Về mặt logic, các lỗi trình điều khiển chỉ nên giới hạn trong nhật ký ứng dụng, lý do là khi vi phạm giao thức xảy ra, kết nối bị hỏng. Kết nối này đã được trả về nhóm kết nối. Bất kỳ người dùng hoặc công việc nào sử dụng kết nối đó sẽ không hoạt động và sẽ gặp lỗi. Đó là lý do tại sao nó sẽ xảy ra ở những nơi ngẫu nhiên, với những người dùng ngẫu nhiên

Giải pháp

Một bản sửa lỗi ngắn hạn là thay đổi thuộc tính này trong nhóm kết nối. Chúng tôi đang sử dụng nhóm kết nối DBCP.

Đã thay đổi fromds.setTestOnBorrow (false); tods.setTestOnBorrow (true);

Bây giờ khi nhóm trả về một kết nối bị hỏng cho nhóm, trước khi ứng dụng mượn kết nối này, nó sẽ kiểm tra tính hợp lệ. Nếu kết nối không sử dụng được, pool sẽ loại bỏ và sau đó ứng dụng sẽ nhận được kết nối mới / hợp lệ.

Nếu bạn bật nhật ký nhóm kết nối, bạn sẽ thấy ngoại lệ thường bị nuốt.

Nâng cấp trình điều khiển

Nâng cấp lên OJDBC 12.1.0.2 từ OJDBC 12.1.0.1 đã giải quyết được sự cố, ngay cả đối với các hàng có vấn đề.

Một số liên kết khác để tham khảo

https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+ready+accessing+a+page+and+Oracle+DB+is+used



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các lựa chọn thay thế cho LIMIT và OFFSET để phân trang trong Oracle

  2. PARTITION BY có và không có KEEP trong Oracle

  3. Nối một cột theo một nhóm trong R

  4. SSIS - không thể chuyển đổi giá trị do có khả năng mất dữ liệu

  5. Làm thế nào để tìm các phụ thuộc bên trong một gói oracle?