Untuk googler masa depan yang memiliki halaman ini, inilah masalah yang kami alami. Pengecualian pelanggaran protokol sedang dicatat pada log aplikasi dan jejak Oracle.
Jejak Oracle
Ini adalah kesalahan dari file jejak Oracle
--- PELANGGARAN PROTOKOL TERDETEKSI ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
Dari Log Aplikasi
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
Gejala
Pengecualian ini terjadi sesekali. Jejak tumpukan memiliki sql berbeda di dalamnya yang sangat membingungkan. Menjalankan sql dengan sql plus bekerja dengan baik.
Akar Penyebab
Pengecualian dilemparkan ketika driver Oracle mencoba mengekspor data CLOB. Ini terjadi dengan hanya beberapa catatan, tidak semuanya. Data seperti itu adalah file. Secara visual kami tidak dapat melihat apa yang salah dengan data tersebut.
Mengapa kami melihat kesalahan di log oracle ?
Jadi jika ini adalah cacat driver, mengapa kami melihat kesalahan di oracle trace ? Logikanya kesalahan driver seharusnya hanya terbatas pada log aplikasi. Alasannya adalah ketika pelanggaran protokol terjadi, koneksi menjadi rusak. Koneksi ini dikembalikan ke kumpulan koneksi. Setiap pengguna atau pekerjaan ketika akan menggunakan koneksi itu tidak akan berfungsi dan akan mengalami kesalahan. Itu sebabnya hal itu akan terjadi di tempat-tempat acak, dengan pengguna acak
Solusi
Perbaikan jangka pendek adalah mengubah properti ini di kumpulan koneksi. Kami menggunakan kumpulan koneksi DBCP.
Berubah fromds.setTestOnBorrow(false);tods.setTestOnBorrow(true);
Sekarang ketika kumpulan mengembalikan koneksi yang rusak ke kumpulan, sebelum aplikasi meminjam koneksi ini, itu akan menguji validitasnya. Jika koneksi tidak dapat digunakan, kumpulan akan dibuang dan aplikasi mendapatkan koneksi baru/valid.
Jika Anda mengaktifkan log kumpulan koneksi, Anda akan melihat pengecualian yang biasanya ditelan.
Peningkatan Versi Pengemudi
Tingkatkan ke OJDBC 12.1.0.2 dari OJDBC 12.1.0.1 memecahkan masalah, bahkan untuk baris yang bermasalah.
Beberapa tautan lain untuk referensi
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+while+accessing+a+page+and+Oracle+DB+is+used