sql >> Databáze >  >> RDS >> Oracle

SQLException:Porušení protokolu. Problém s ovladačem Oracle JDBC

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



  1. Jak zálohovat a obnovit databázi PostgreSQL přes DBeaver

  2. Migrace stávajících dat auth.User do nového uživatelského modelu Django 1.5?

  3. Jak monitorovat databáze MySQL/MariaDB pomocí Netdata na CentOS 7

  4. Jak vytvořit dotaz s group_concat na serveru SQL