Для будущих гуглеров, которым нужна эта страница, вот проблема, с которой мы столкнулись.Исключение нарушения протокола регистрируется в журналах приложений и трассировке Oracle.
Трассировка Oracle
Это ошибка из файлов трассировки оракула
---ОБНАРУЖЕНО НАРУШЕНИЕ ПРОТОКОЛА ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
Из журналов приложений
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
Симптом
Произошло это исключениевремя от времени.В трассировке стека были разные sql, что очень сбивало с толку.Выполнение sql с sql plus работало нормально.
Root Cause
Исключение было выдано, когда драйвер oracle пытался экспортировать данные CLOB.Это происходило с несколькими записями, но не со всеми.Данные как таковые были файлом.Визуально мы не могли разобрать, что не так с этими данными.
Почему мы видели ошибки в журналах оракула?
Так что, если это был дефект драйвера, почемумы видим ошибку в oracle trace?Логически ошибки драйвера должны быть ограничены только журналами приложений.Причины были в том, что при нарушении протокола соединение было повреждено.Это соединение было возвращено в пул соединений.Любой пользователь или работа, которая будет использовать это соединение, не будет работать и будет иметь ошибку.Вот почему это произойдет в случайных местах со случайными пользователями
Решение
Кратковременное исправление состояло в изменении этого свойства в пуле соединений.Мы используем пул соединений DBCP.
Изменено в ds.setTestOnBorrow (false);to ds.setTestOnBorrow (true);
Теперь, когда пул возвращает поврежденное соединение с пулом, прежде чем приложение заимствует это соединение, оно будет проверяться на достоверность.Если соединение непригодно для использования, пул откажется, а затем приложение получит новое / действительное соединение.
Если вы включите журналы пула соединений, вы должны увидеть исключение, которое обычно проглатывается.Обновление драйвера
Обновление до OJDBC 12.1.0.2 с OJDBC 12.1.0.1 решило проблему даже для проблемных строк.
Некоторые другие ссылки для справки
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+while+accessing+a+page+and+Oracle+DB+is+used