2012-03-19 16 views
6

अपने आवेदन में मैं ओरेकल, करने के लिए कनेक्शन का उपयोग जब कनेक्शन खो दिया है और मैं करने की कोशिश फिर से कनेक्ट मैं अपवाद प्राप्त करते हैं:java.sql.SQLException: Io अपवाद: टूटा पाइप कैसे पुनरारंभ किए बिना पुनर्प्राप्त करें?

java.sql.SQLException: Io exception: Broken pipe 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273) 
    at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:540) 
    at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:264) 
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:196) 

के लिए ठीक हो मैं अनुप्रयोग फिर से आरंभ करने की जरूरत है, यह संभव है पुनः आरंभ करने के बिना ठीक हो जाता है? धन्यवाद।

उत्तर

3

Followings संभावनाओं जो अपवाद कारण हो सकता है हो सकता है:

  1. नेटवर्क समस्या: यह भौतिक कनेक्शन के कारण समय की अवधि के बाद गिरा दिया जाना डेटाबेस और अनुप्रयोग सर्वर के बीच नेटवर्क है। यह शायद नेटवर्क के पीछे चलने वाली फ़ायरवॉल के कारण है जो निर्दिष्ट समय के बाद डीबी कनेक्शन को मारने के लिए कॉन्फ़िगर किया गया है। आप अपने एप्लिकेशन सर्वर को पुनः कॉन्फ़िगर करके बस हर समय कनेक्शन को बनाए रखने के लिए एक समाधान पर विचार कर सकते हैं। टॉमकैट के लिए, आप validationQuery="select 'validationQuery' from dua एल को टॉमकैट डेटासॉर्स conf फ़ाइल (context.xml)

  2. डेटाबेस सर्वर से कनेक्शन रीसेट कर रहे हैं और क्लाइंट को डेटाबेस ड्राइवर द्वारा अधिसूचित नहीं किया जा सकता है। इस मामले में समस्या यह है कि ओरेकल ड्राइवर यह खोज रहा है कि यह किसी भी तरह से डीबीएमएस को सॉकेट है (फ़ायरवॉल दोबारा, हो सकता है?) दूसरे छोर से बंद कर दिया गया है। आप समाधान के रूप में नेटवर्क/डीबी सर्वर टाइमआउट से कम अपने कनेक्शन टाइमआउट (पूल में) को सेट करने पर विचार कर सकते हैं।

+0

"डेटाबेस सर्वर से कनेक्शन रीसेट हो रहे हैं और क्लाइंट को डेटाबेस ड्राइवर द्वारा अधिसूचित नहीं किया गया है।" तब आप अपवाद को क्या कहते हैं? – EJP