2013-01-18 31 views
9

Tôi gặp sự cố khi kết nối với cơ sở dữ liệu Oracle, phải mất một thời gian dài (khoảng ~ 5 phút) và nó gửi ngoại lệ được hiển thị bên dưới. Hầu hết thời gian, sau khi lỗi đầu tiên, các kết nối tiếp theo cho cùng một quá trình hoạt động chính xác.Kết nối Java OracleDB mất quá nhiều thời gian đầu tiên

Đây là một máy RHEL 6, với hai giao diện mạng và địa chỉ IP khác nhau.

LƯU Ý: Tôi không sử dụng url như: "jdbc: oracle: thin: @xxxx: yyy, thực tế là:" jdbc: oracle: thin: @xxxx: yyyy: zzz. SID là không thiếu, tiếc vì điều đó :(

Đây là khoảng những gì tôi đã bị cô lập:

bin/java -classpath ojdbc6_g.jar -Djavax.net.debug = tất cả -Djava .util.logging.config.file = logging.properties

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

Lỗi 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

Có một khúc gỗ rất dài dòng về những gì xảy ra ở đây: http://pastebin.com/MMFKU26z Dòng nói rằng gặp khó khăn ĐÂY đại diện cho 5 phút thời gian chờ đợi

+0

Tôi đoán nó liên quan đến hai giao diện mạng. Có thể là nó đi sai, lần ra ngoài và sau đó sử dụng đúng? –

+0

Tôi cũng nghĩ vậy, có cách nào để kiểm tra điều này không? – iamedu

Trả lời

12

Có thể bạn đang gặp sự cố với trình điều khiển Oracle JDBC, sử dụng trình tạo số ngẫu nhiên chặn theo mặc định trên Linux. Hãy thử chạy Java với đối số sau:

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

Hoặc bạn có thể khởi động trình nền để nạp trình tạo số ngẫu nhiên. Linux "rngd" daemon là một ví dụ.

Nguồn:

+0

Tôi ước tôi có thể cho số phiếu bầu nhiều hơn. Điều này _everything_ cố định với kết nối chậm của tôi để oracle trên hệ thống giám sát của tôi ... chạy trên Ubuntu 14.04.3 LTS. –

1

Nhìn vào chuỗi kết nối của bạn, có vẻ như tên dịch vụ Oracle hoặc SID là còn thiếu. Chuỗi kết nối phải giống như "jdbc:oracle:thin:@xxxx:yyyy/zzz", trong đó zzz là SID. Bạn cũng có thể muốn xem câu trả lời cho this question.

+0

Xin vui lòng đọc kỹ câu hỏi: * Phần lớn thời gian, sau lỗi đầu tiên, các kết nối tiếp theo cho cùng một quá trình hoạt động chính xác * – Andremoniy

+1

@Andremoniy Phần câu hỏi bạn trích dẫn có thể là kết quả của hành vi nghe TNS. Vì vậy, từ quan điểm của một người nghe TNS, nó có thể trông như thế này: một số khách hàng thiết lập một kết nối, nhưng không nói những gì dịch vụ cụ thể nó muốn sử dụng.Người nghe chờ một thời gian và cuối cùng đặt lại kết nối. Dù sao, định dạng của chuỗi kết nối trong mã ví dụ là không chính xác - đó là lý do tại sao tôi giải quyết nó. –

+0

Xin lỗi !!! Xấu của tôi, khi tôi giấu các thông số tôi quên SID, nhưng nó là có hình thức thực tế là: "jdbc: oracle: thin: @xxxx: yyyy: zzz" – iamedu

Các vấn đề liên quan