भविष्य के googlers के लिए जो इस पृष्ठ पर हैं, हमारे पास यह समस्या है। एप्लिकेशन लॉग और Oracle ट्रेस पर प्रोटोकॉल उल्लंघन अपवाद लॉग किया जा रहा था।
Oracle ट्रेस
यह ऑरैकल ट्रेस फ़ाइलों की त्रुटि है
--- प्रोटोकॉल उल्लंघन का पता चला ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
एप्लिकेशन लॉग से
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
लक्षण
यह अपवाद कभी-कभार ही हो रहा था। स्टैक ट्रेस में अलग-अलग sql थे जो बहुत भ्रमित करने वाले थे। एसक्यूएल प्लस के साथ एसक्यूएल चलाना ठीक काम किया।
मूल कारण
अपवाद तब फेंका गया जब ऑरैकल ड्राइवर CLOB डेटा निर्यात करने का प्रयास कर रहा था। यह केवल कुछ रिकॉर्ड्स के साथ हो रहा था, सभी में नहीं। इस तरह का डेटा एक फाइल था। नेत्रहीन हम यह पता नहीं लगा सके कि उस डेटा में क्या गलत था।
हम oracle लॉग में त्रुटियां क्यों देख रहे थे?
तो अगर यह एक ड्राइवर दोष था, तो हमें ऑरैकल ट्रेस में त्रुटि क्यों दिखाई दी? तार्किक रूप से ड्राइवर की त्रुटियां केवल एप्लिकेशन लॉग तक ही सीमित होनी चाहिए। कारण यह था कि जब प्रोटोकॉल का उल्लंघन हुआ, तो कनेक्शन दूषित हो गया। यह कनेक्शन कनेक्शन पूल में वापस कर दिया गया था। कोई भी उपयोगकर्ता या नौकरी जब उस कनेक्शन का उपयोग करेगा तो काम नहीं करेगा और त्रुटि का अनुभव होगा। यही कारण है कि यह यादृच्छिक स्थानों पर यादृच्छिक उपयोगकर्ताओं के साथ होगा
समाधान
इस प्रॉपर्टी को कनेक्शन पूल में बदलने के लिए एक शॉर्ट टर्म फिक्स था। हम DBCP कनेक्शन पूल का उपयोग कर रहे हैं।
से बदला गया।
अब जब पूल पूल में एक दूषित कनेक्शन लौटाता है, इससे पहले कि ऐप इस कनेक्शन को उधार लेता है, यह वैधता के लिए परीक्षण करेगा। यदि कनेक्शन अनुपयोगी है, तो पूल को छोड़ दिया जाएगा और फिर ऐप को एक नया/वैध कनेक्शन मिल जाएगा।
यदि आप कनेक्शन पूल लॉग को सक्षम करते हैं, तो आपको वह अपवाद देखना चाहिए जो सामान्य रूप से निगल लिया जाता है।
ड्राइवर अपग्रेड
OJDBC 12.1.0.2 से OJDBC 12.1.0.1 में अपग्रेड करने से समस्या हल हो गई, यहां तक कि समस्याग्रस्त पंक्तियों के लिए भी।
संदर्भ के लिए कुछ अन्य लिंक
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+where+accessing+a+page+and+Oracle+DB+is+used