Voor toekomstige googlers die naar deze pagina moeten, hier is het probleem dat we hadden. De uitzondering voor protocolschending werd vastgelegd in toepassingslogboeken en Oracle-tracering.
Oracle trace
Dit is een fout van orakel-traceerbestanden
--- PROTOCOLSCHENDING GEDETECTEERD ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
Van toepassingslogboeken
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
Symptoom
Deze uitzondering kwam af en toe voor. De stacktracering bevatte verschillende sql, wat erg verwarrend was. Het uitvoeren van de sql met sql plus werkte prima.
Hoofdoorzaak
De uitzondering is opgetreden toen het orakelstuurprogramma probeerde CLOB-gegevens te exporteren. Dit gebeurde met slechts enkele records, niet allemaal. De gegevens waren als zodanig een bestand. Visueel konden we niet zien wat er mis was met die gegevens.
Waarom zagen we fouten in orakellogboeken?
Dus als dit een driverfout was, waarom zagen we dan de fout in Oracle Trace? Logischerwijs zouden de stuurprogrammafouten alleen beperkt moeten blijven tot toepassingslogboeken. De reden was dat toen protocolschending plaatsvond, de verbinding beschadigd raakte. Deze verbinding is teruggestuurd naar de verbindingspool. Elke gebruiker of taak die die verbinding gebruikt, zou niet werken en zou een fout ervaren. Daarom zal het op willekeurige plaatsen gebeuren, met willekeurige gebruikers
Oplossing
Een kortetermijnoplossing was om deze eigenschap in de verbindingspool te wijzigen. We gebruiken een DBCP-verbindingspool.
Gewijzigd vands.setTestOnBorrow(false);tods.setTestOnBorrow(true);
Wanneer de pool nu een beschadigde verbinding naar de pool retourneert, voordat de app deze verbinding leent, zou deze op geldigheid testen. Als de verbinding onbruikbaar is, wordt de pool weggegooid en krijgt de app een nieuwe/geldige verbinding.
Als u verbindingspoollogboeken inschakelt, zou u de uitzondering moeten zien die normaal gesproken wordt ingeslikt.
Driver-upgrade
Upgrade naar OJDBC 12.1.0.2 van OJDBC 12.1.0.1 loste het probleem op, zelfs voor de problematische rijen.
Enkele andere links ter referentie
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+while+accessing+a+page+and+Oracle+DB+is+used