2016-11-25 24 views
0

oracle RDBMSバージョン12.1.0.2.0を使用しているアプリケーションに問題があります。 私が正しくデータベースに接続しておりますが、時々私は例外接続の問題Oracleクラウド

java.sql.SQLRecoverableException: IO Error: Connection reset 
    at java.lang.Thread.run(Unknown Source) 
    Suppressed: java.sql.SQLRecoverableException: Closed Connection 

    ... 

    Caused by: java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at oracle.net.ns.Packet.receive(Packet.java:311) 
    at oracle.net.ns.DataPacket.receive(DataPacket.java:105) 

と(B)といくつかのスプリアス切断私も接続

を作成することはできませんいくつかの他の回( )を取得
java.sql.SQLRecoverableException: IO Error: Software caused connection abort: recv failed 
    ... 
    Caused by: java.net.SocketException: Software caused connection abort: recv failed 

それとも

Caused by: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673) 
     at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715) 
     at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385) 
     at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30) 
     at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564) 
     at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:322) 
     ... 6 more 
    Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection 
     at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:445) 
     at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464) 
     at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594) 
     at oracle.net.ns.NSProtocol.connect(NSProtocol.java:229) 
     at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360) 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486) 
     ... 11 more 
    Caused by: java.net.ConnectException: Connection refused: connect 
     at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) [rt.jar:1.8.0_92] 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) [rt.jar:1.8.0_92] 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) [rt.jar:1.8.0_92] 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) [rt.jar:1.8.0_92] 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) [rt.jar:1.8.0_92] 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) [rt.jar:1.8.0_92] 
     at java.net.Socket.connect(Socket.java:589) [rt.jar:1.8.0_92] 
     at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:162) 
     at oracle.net.nt.ConnOption.connect(ConnOption.java:133) 
     at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411) 

アプリの一部陽イオンは、以下のスタンドアロンの設定

<connection-url>connectionString</connection-url> 
    <driver-class>oracle.jdbc.OracleDriver</driver-class> 
    <driver>ojdbc7.jar</driver> 
    <pool> 
     <min-pool-size>12</min-pool-size> 
     <max-pool-size>24</max-pool-size> 
     <prefill>false</prefill> 
     <use-strict-min>true</use-strict-min> 
    </pool> 
    <security> 
     <user-name>user</user-name> 
     <password>password</password> 
    </security> 
    <validation> 
     <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/> 
     <validate-on-match>false</validate-on-match> 
     <background-validation>true</background-validation> 
     <background-validation-millis>300000</background-validation-millis> 
     <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/> 
    </validation> 
    <timeout> 
     <set-tx-query-timeout>false</set-tx-query-timeout> 
     <blocking-timeout-millis>0</blocking-timeout-millis> 
     <idle-timeout-minutes>8</idle-timeout-minutes> 
     <query-timeout>0</query-timeout> 
     <use-try-lock>0</use-try-lock> 
     <allocation-retry>0</allocation-retry> 
     <allocation-retry-wait-millis>0</allocation-retry-wait-millis> 
    </timeout> 
    <statement> 
     <track-statements>true</track-statements> 
     <share-prepared-statements>false</share-prepared-statements> 
    </statement> 

そして残りの部分とwildfly V8.2を使用しているJDBCを使用してスタンドアロンアプリケーションです。 私は既にリスナーログをチェックしており、それに従ってアプリケーションは要求を送信しませんでした(Bシナリオ)。 アプリケーションは1秒後に再試行し、正常に接続し、アプリケーションが同じネットワーク内に配置されていることに注意してください。

原因を特定できますか?

ありがとうございます。

答えて

0

(A):エラーは、ソケットが正常に閉じられたことを示します。これは、マイクロネットワークの停止である可能性があります。または、アプリケーションとデータベースの中間にあるファイアウォールで、x秒以上アクティビティが検出されなかった場合にソケットを閉じることができます。 oracle.net.keepAliveの接続プロパティをtrueに設定すると、キープアライブをオンにするのに役立ちます。このプロパティは、-Dを使用してJavaシステムプロパティとして設定することもできます。

(B):リスナーは、ログオンストーム時に役立つレート制限が設定されている場合、ソケット接続の試行を拒否することがあります。適切なクライアントは、少し遅れて再試行する必要があります。 12.1.0.2のJDBCシンドライバーはURL内のこれらの2つのパラメーターをサポートしています(値は秒単位です)。例:

(DESCRIPTION_LIST= 
    (DESCRIPTION= 
    (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(RETRY_DELAY=3) 
    (ADDRESS_LIST= 
    (ADDRESS=(PROTOCOL=tcp)(HOST=myhost1)(PORT=1521)) 
    (ADDRESS=(PROTOCOL=tcp)(HOST=myhost2)(PORT=1521))) 
    (CONNECT_DATA=(SERVICE_NAME=example1.com))) 
    (DESCRIPTION= 
    (CONNECT_TIMEOUT=60)(RETRY_COUNT=1)(RETRY_DELAY=5) 
    (ADDRESS_LIST= 
    (ADDRESS=(PROTOCOL=tcp)(HOST=myhost3)(PORT=1521)) 
    (ADDRESS=(PROTOCOL=tcp)(HOST=myhost4)(PORT=1521))) 
    (CONNECT_DATA=(SERVICE_NAME=example2.com)))) 

ドキュメントはhereです。