sql >> Database teknologi >  >> RDS >> Oracle

SQLException:Protokolbrud. Oracle JDBC-driver problem

For fremtidige googlere, som er nødt til at besøge denne side, her er det problem, vi havde. Protokolovertrædelsesundtagelsen blev logget på applikationslogfiler og Oracle-sporing.

Oracle-sporing

Dette er en fejl fra oracle-sporingsfiler

--- PROTOKOLOVERTRÆDELSE PÅDAGET ---

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

Fra applikationslogfiler

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

Symptom

Denne undtagelse fandt sted af og til. Staksporingen havde forskellig sql, hvilket var meget forvirrende. At køre sql med sql plus fungerede fint.

Root-årsag

Undtagelsen blev kastet, da oracle-driveren forsøgte at eksportere en CLOB-data. Dette skete med kun få plader, ikke dem alle. Dataene som sådan var en fil. Visuelt kunne vi ikke se, hvad der var galt med disse data.

Hvorfor så vi fejl i oracle-logfiler?

Så hvis dette var en driverfejl, hvorfor så vi fejlen i oracle trace? Logisk set bør driverfejlene kun være begrænset til applikationslogfiler. Årsagerne var, at da protokolbrud skete, blev forbindelsen ødelagt. Denne forbindelse blev returneret til forbindelsespuljen. Enhver bruger eller job, der vil bruge den forbindelse, ville ikke fungere og ville opleve fejl. Det er derfor, det vil ske tilfældige steder med tilfældige brugere

Løsning

En kortsigtet løsning var at ændre denne ejendom i forbindelsespuljen. Vi bruger DBCP-forbindelsespulje.

Ændret frads.setTestOnBorrow(false);tods.setTestOnBorrow(true);

Når puljen nu returnerer en beskadiget forbindelse til puljen, før appen låner denne forbindelse, ville den teste for gyldighed. Hvis forbindelsen er ubrugelig, vil pool kassere, og derefter får appen en ny/gyldig forbindelse.

Hvis du aktiverer logfiler for forbindelsespuljen, bør du se undtagelsen, som normalt sluges.

Driveropgradering

Opgradering til OJDBC 12.1.0.2 fra OJDBC 12.1.0.1 løste problemet, selv for de problematiske rækker.

Nogle andre links til reference

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



  1. Kom godt i gang med SQLite fuldtekstsøgning

  2. SQLAlchemy eller psychopg2?

  3. Brug af store parametre til Microsoft SQL-lagret procedure med DAO

  4. OFFSET vs. ROW_NUMBER()