Đố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