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