2013-01-18 46 views
9

मुझे ओरेकल डेटाबेस से कनेक्ट करते समय कोई समस्या आ रही है, इसमें काफी समय लगता है (लगभग ~ 5 मिनट) और यह नीचे दिखाए गए अपवाद भेजता है। अधिकांश समय, पहली त्रुटि के बाद, उसी प्रक्रिया के लिए अगले कनेक्शन सही तरीके से काम करते हैं।जावा ओरेकलडीबी कनेक्शन पहली बार बहुत लंबा समय ले रहा है

यह दो अलग-अलग नेटवर्क इंटरफेस और आईपी पते के साथ एक आरएचईएल 6 मशीन है।

नोट: मैं एक यूआरएल का उपयोग नहीं कर रहा हूं: "jdbc: oracle: पतला: @xxxx: yyy, यह वास्तव में है:" jdbc: oracle: पतला: @xxxx: yyyy: zzz। सिड लापता नहीं है, कि :(लिए खेद

यह मोटे तौर पर मैं क्या अलग-थलग पड़ गया है:

bin/जावा -classpath ojdbc6_g.jar -Djavax.net.debug = सभी -Djava .util.logging.config.file = logging.properties

Class.forName ("oracle.jdbc.OracleDriver") 
DriverManager.getConnection("jdbc:oracle:thin:@xxxx:yyyy", "aaaa", "bbbb") 

त्रुटि StackTrace:

java.sql.SQLRecoverableException: IO Error: Connection reset 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:533) 
     at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557) 
     at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233) 
     at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29) 
     at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556) 
     at java.sql.DriverManager.getConnection(DriverManager.java:579) 
     at java.sql.DriverManager.getConnection(DriverManager.java:221) 
     at test.jdbc.Main(Test.java:120) 
Caused by: java.net.SocketException: Connection reset 
     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) 
     at java.net.SocketOutputStream.write(SocketOutputStream.java:153) 
     at oracle.net.ns.DataPacket.send(DataPacket.java:248) 
     at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:227) 
     at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:309) 
     at oracle.net.ns.NetInputStream.read(NetInputStream.java:257) 
     at oracle.net.ns.NetInputStream.read(NetInputStream.java:182) 
     at oracle.net.ns.NetInputStream.read(NetInputStream.java:99) 
     at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:121) 
     at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:77) 
     at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1173) 
     at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:309) 
     at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:200) 
     at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:404) 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:430) 
     ... 35 more 
,210

क्या यहाँ पर होता है की एक बहुत ही वर्बोज़ लॉग नहीं है: http://pastebin.com/MMFKU26z लाइन का कहना है कि यहाँ अटक जाते हैं 5 मिनट प्रतीक्षा समय

+0

मुझे लगता है कि यह दो नेटवर्क इंटरफेस से संबंधित है। क्या यह संभव है कि यह गलत के लिए मार्ग, समय समाप्त हो और फिर सही का उपयोग करता हो? –

+0

मुझे ऐसा भी लगता है, क्या यह जांचने का कोई तरीका है? – iamedu

उत्तर

12

शायद आप ओरेकल जेडीबीसी ड्राइवर के साथ किसी समस्या में भाग रहे हैं जो लिनक्स पर डिफ़ॉल्ट रूप से अवरुद्ध यादृच्छिक संख्या जनरेटर का उपयोग करता है। निम्न तर्क के साथ जावा चलाने का प्रयास करें:

-Djava.security.egd=file:/dev/./urandom 

वैकल्पिक रूप से आप यादृच्छिक संख्या जनरेटर को खिलाने के लिए एक डिमन शुरू कर सकते हैं। लिनक्स "आरएनजीडी" डिमन एक उदाहरण है।

सूत्रों का कहना है:

+0

मेरी इच्छा है कि मैं यह और वोट दे सकता हूं। यह मेरे मॉनिटरिंग सिस्टम पर ऑरैकल के धीमे कनेक्शन के साथ _everything_ तय है ... उबंटू 14.04.3 एलटीएस पर चल रहा है। –

1

का प्रतिनिधित्व करता है अपने कनेक्शन स्ट्रिंग को देखते हुए, ऐसा लगता है कि ओरेकल सेवा का नाम या सिड है लापता। कनेक्शन स्ट्रिंग "jdbc:oracle:thin:@xxxx:yyyy/zzz" की तरह दिखनी चाहिए, जहां zzz एसआईडी है। आप this question के उत्तर पर भी एक नज़र डालना चाहते हैं।

+0

कृपया, सावधानीपूर्वक प्रश्न पढ़ें: * अधिकांश समय, पहली त्रुटि के बाद, उसी प्रक्रिया के लिए अगले कनेक्शन सही तरीके से काम करते हैं। * – Andremoniy

+1

@Andremoniy आपके द्वारा उद्धृत प्रश्न भाग टीएनएस श्रोता व्यवहार का परिणाम हो सकता है। तो एक टीएनएस श्रोता के परिप्रेक्ष्य से, यह इस तरह दिखेगा: कुछ ग्राहक एक कनेक्शन स्थापित करता है, लेकिन यह नहीं कहता कि वह किस विशेष सेवा का उपयोग करना चाहता है।श्रोता कुछ समय के लिए इंतजार कर रहा है, और अंत में कनेक्शन रीसेट करता है। वैसे भी, उदाहरण कोड में कनेक्शन स्ट्रिंग का प्रारूप गलत है - यही कारण है कि मैंने इसे संबोधित किया। –

+0

क्षमा करें !!! मेरा बुरा, जब मैंने पैरामीटर छुपाया तो मैं एसआईडी भूल गया, लेकिन यह वास्तविक रूप है: "jdbc: oracle: पतला: @xxxx: yyyy: zzz" – iamedu