2016-11-25 1 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) 

어플리의 일부 양이온은 다음 독립 실행 형 설정으로 wildfly v8.2를 사용합니다.

<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> 

나머지는 JDBC를 사용하는 독립 실행 형 응용 프로그램입니다. 이미 청취자 로그를 확인한 결과 애플리케이션이 요청을 보내지 않았습니다 (B 시나리오). 응용 프로그램이 1 초 후에 다시 시도하고 성공적으로 연결하고 응용 프로그램이 동일한 네트워크 내에 배포되는지 확인하십시오.

원인을 파악하는 데 도움을 주시겠습니까?

감사합니다.

답변

0

(A) : 오류는 소켓이 정상적으로 닫혔 음을 나타냅니다. 이것은 마이크로 네트워크 중단 일 수도 있고, x 초 이상 활동이 감지되지 않을 때 소켓을 닫는 응용 프로그램과 데이터베이스 사이의 중간 지점에있는 방화벽 일 수도 있습니다. oracle.net.keepAlive 연결 속성을 true으로 설정하여 활성 상태를 유지하는 것이 도움이 될 수 있습니다. 이 등록 정보는 -D을 사용하여 Java 시스템 등록 정보로 설정할 수도 있습니다.

(B) : 로그온 폭풍우 동안 도움이되는 속도 제한이 구성되어 있으면 수신 대기자가 소켓 연결 시도를 거부 할 수 있습니다. 적절한 클라이언트는 약간의 지연으로 다시 시도해야합니다. 12.1.0.2의 JDBC 씬 드라이버는 URL에서이 두 매개 변수를 지원합니다 (값은 초 단위 임). 예 :

(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)))) 

doc은 here입니다.