Pro budoucí googlery, kteří mají na tuto stránku, je zde problém, který jsme měli. Výjimka porušení protokolu byla zaznamenána do protokolů aplikací a trasování Oracle.
Oracle trace
Toto je chyba ze trasovacích souborů oracle
--- ZJIŠTĚNO PORUŠENÍ PROTOKOLU ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
Z protokolů aplikací
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
Příznak
Tato výjimka se občas stávala. Trasování zásobníku obsahovalo různé sql, což bylo velmi matoucí. Spuštění sql s sql plus fungovalo dobře.
Kořenová příčina
Výjimka byla vyvolána, když se ovladač oracle pokoušel exportovat data CLOB. To se dělo jen u několika záznamů, ne u všech. Data jako taková byla souborem. Vizuálně jsme nemohli rozpoznat, co je s těmi daty špatně.
Proč jsme zaznamenali chyby v protokolech Oracle?
Takže pokud to byla závada ovladače, proč jsme viděli chybu v oracle trace? Logicky by chyby ovladače měly být omezeny pouze na protokoly aplikace. Důvodem bylo, že když došlo k porušení protokolu, došlo k poškození spojení. Toto připojení bylo vráceno do fondu připojení. Jakýkoli uživatel nebo úloha, která bude toto připojení používat, nebude fungovat a dojde k chybě. To je důvod, proč se to stane na náhodných místech s náhodnými uživateli
Řešení
Krátkodobou opravou byla změna této vlastnosti ve fondu připojení. Používáme fond připojení DBCP.
Změněno z ds.setTestOnBorrow(false);tods.setTestOnBorrow(true);
Když nyní fond vrátí poškozené připojení k fondu, než si aplikace toto spojení vypůjčí, otestuje platnost. Pokud je připojení nepoužitelné, fond se zahodí a aplikace získá nové/platné připojení.
Pokud povolíte protokoly fondu připojení, měli byste vidět výjimku, která je normálně spolknuta.
Upgrade ovladače
Upgrade na OJDBC 12.1.0.2 z OJDBC 12.1.0.1 problém vyřešil, a to i pro problematické řádky.
Některé další odkazy pro referenci
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+while+accessing+a+page+and+Oracle+DB+is+used