Oracle
 sql >> база данни >  >> RDS >> Oracle

SQLException:нарушение на протокола. Проблем с драйвера на Oracle JDBC

За бъдещи потребители на Google, които трябва да посещават тази страница, ето какъв е проблемът, който имахме. Изключението за нарушение на протокола се регистрираше в регистрационните файлове на приложенията и проследяването на Oracle.

Проследяване на 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 работи добре.

Основна причина

Изключението беше изхвърлено, когато драйверът на Oracle се опитваше да експортира CLOB данни. Това се случваше само с няколко записа, не с всички. Данните като такива бяха файл. Визуално не можахме да разберем какво не е наред с тези данни.

Защо виждахме грешки в регистрационните файлове на Oracle?

Така че, ако това е дефект на драйвера, защо видяхме грешката в следа на оракула? Логично грешките на драйвера трябва да бъдат ограничени само до регистрационните файлове на приложенията. Причините бяха, че когато се случи нарушение на протокола, връзката се повреди. Тази връзка беше върната в пула за връзки. Всеки потребител или работа, когато ще използва тази връзка, няма да работи и ще възникне грешка. Ето защо това ще се случи на произволни места, с произволни потребители

Решение

Краткосрочна корекция беше да се промени това свойство в пула за връзки. Използваме пул за DBCP връзки.

Променено от ds.setTestOnBorrow(false);tods.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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разбиране на Java на Oracle на Mac

  2. Има ли автоматичен тип времеви печат за модификация за колони на Oracle?

  3. Метаданни относно типове записи на ниво пакет PL/SQL

  4. Oracle:Какво прави „(+)“ в клауза WHERE?

  5. Как да предадете булев параметър на процедурата на Oracle C#