2013년 6월 20일 목요일

Oracle에서의 Software caused connection abort: recv failed 오류가 발생했을 때

오라클 서버 이전을 하게 되었다.
물리적 장비를 사용하다가 이번에 가상화 장비로 이전을 하게 되었고 데이터를 이전 한 후
기존 웹 서비스에 물려 테스트를 하게 되었다.

헌데 그전에는 발견하지 못했던 오류가 발생했다.

Software caused connection abort: recv failed

위의 오류는 웹 서버를 구동한 후 서비스가 활성화 되고 서비스에서 디비 서버 측에 데이터 요청을 하지 않으면 디비 서버에서 커넥션을 close해서 발생하는 문제 였다.

내가 관리하는 웹 서비스는 spring3 framework를 사용하고 있다.
디비에 접속하는 DataSource는 org.apache.commons.dbcp.BasicDataSource를 사용 중이다.

org.apache.commons.dbcp.BasicDataSource 라이브러리에서 위의 오류를 발생하지 않도록 하는 방법이 있을 것 같아 찾아 보았다.

오라클의 경우에는 BasicDataSource 내에 validationQuery 속성이 있고
이 속성은 DB를 연결하기 전에 해당 Connection이 정상적인지 유효성 판단을 한다.

사용 방법은 아래와 같다

<bean id="transactionCPSDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName"><value>${txcps.jdbc.driver}</value></property>
        <property name="url"><value>${txcps.jdbc.url}</value></property>
        <property name="username"><value>${txcps.jdbc.username}</value></property>
        <property name="password"><value>${txcps.jdbc.password}</value></property>
        <property name="defaultAutoCommit"><value>${txcps.jdbc.commit}</value></property>
        <property name="maxActive"><value>${txcps.jdbc.active}</value></property>
        <property name="maxIdle"><value>${txcps.jdbc.idle}</value></property>
        <property name="validationQuery" value="select 1 from dual"></property>
    </bean>

위의 붉은 색 글씨 부분 처럼 넣어주면 된다.

끝!! 머리 아팠는데 우하하

댓글 1개:

  1. 고맙습니다. 덕분에 로컬 서버에서 불편했던 점 해결했습니다.

    답글삭제