Für zukünftige Googler, die diese Seite besuchen müssen, ist hier das Problem, das wir hatten. Die Protokollverletzungsausnahme wurde in Anwendungsprotokollen und Oracle-Trace protokolliert.
Oracle-Trace
Dies ist ein Fehler von Oracle-Trace-Dateien
--- PROTOKOLLVERLETZUNG ERKANNT ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
Aus Anwendungsprotokollen
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
Symptom
Diese Ausnahme trat gelegentlich auf. Der Stack-Trace enthielt unterschiedliche SQL, was sehr verwirrend war. Das Ausführen von SQL mit SQL Plus funktionierte einwandfrei.
Grundursache
Die Ausnahme wurde ausgelöst, als der Oracle-Treiber versuchte, CLOB-Daten zu exportieren. Dies geschah nur bei wenigen Datensätzen, nicht bei allen. Die Daten als solche waren eine Datei. Visuell konnten wir nicht erkennen, was mit diesen Daten nicht stimmte.
Warum haben wir Fehler in Oracle-Protokollen gesehen?
Wenn dies also ein Treiberdefekt war, warum haben wir den Fehler in Oracle Trace gesehen? Logischerweise sollten sich die Treiberfehler nur auf Anwendungsprotokolle beschränken. Der Grund dafür war, dass bei einer Protokollverletzung die Verbindung beschädigt wurde. Diese Verbindung wurde an den Verbindungspool zurückgegeben. Jeder Benutzer oder Job, der diese Verbindung verwendet, würde nicht funktionieren und es würde ein Fehler auftreten. Deshalb wird es an zufälligen Orten mit zufälligen Benutzern passieren
Lösung
Eine kurzfristige Lösung bestand darin, diese Eigenschaft im Verbindungspool zu ändern. Wir verwenden den DBCP-Verbindungspool.
Geändert vonds.setTestOnBorrow(false);tods.setTestOnBorrow(true);
Wenn der Pool nun eine beschädigte Verbindung an den Pool zurückgibt, wird die Gültigkeit geprüft, bevor die App diese Verbindung ausleiht. Wenn die Verbindung unbrauchbar ist, wird der Pool verworfen und die App erhält eine neue/gültige Verbindung.
Wenn Sie Verbindungspoolprotokolle aktivieren, sollten Sie die Ausnahme sehen, die normalerweise verschluckt wird.
Treiber-Upgrade
Das Upgrade auf OJDBC 12.1.0.2 von OJDBC 12.1.0.1 löste das Problem, sogar für die problematischen Zeilen.
Einige andere Referenzlinks
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+while+accessing+a+page+and+Oracle+DB+is+used