13

Oracle データベースへの接続に問題があり、時間がかかり (約 5 分)、以下に示す例外が送信されます。ほとんどの場合、最初のエラーの後、同じプロセスの次の接続は正しく機能します。

これは、2 つの異なるネットワーク インターフェイスと IP アドレスを持つ RHEL 6 マシンです。

注: 「jdbc:oracle:thin:@xxxx:yyy」のような URL は使用していません。実際には「jdbc:oracle:thin:@xxxx:yyyy:zzz. SIDが欠落していません。申し訳ありません:(

これは大まかに私が分離したものです:

bin/java -classpath ojdbc6_g.jar -Djavax.net.debug=all -Djava.util.logging.config.file=logging.properties

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

エラー スタック トレース:

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

ここで起こったことの非常に詳細なログがあります: http://pastebin.com/MMFKU26z GET STUCK HERE と書かれている行は、5 分間の待機時間を表します

4

2 に答える 2

27

Linux でデフォルトでブロッキング乱数ジェネレーターを使用する Oracle JDBC ドライバーで問題が発生している可能性があります。次の引数を指定して Java を実行してみてください。

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

または、デーモンを起動して乱数ジェネレーターにフィードすることもできます。Linux の「rngd」デーモンがその例です。

ソース:

于 2014-07-09T16:39:07.000 に答える
1

接続文字列を見ると、Oracleサービス名またはSIDが欠落しているようです。接続文字列は次のよう"jdbc:oracle:thin:@xxxx:yyyy/zzz"になります。ここzzzで、はSIDです。この質問への回答もご覧ください。

于 2013-01-18T14:19:49.067 に答える