2009-07-06 4 views
11

OracleConnectionCacheImpl을 통해 Oracle 연결 풀링에 문제가 있습니다. 씬 드라이버를 통해 데이터베이스 서버 (Oracle 10g)의 연결 풀에 연결할 때 지정되지 않은 시간이 지나면 유휴 연결로 인해 db 연결이 끊어지고 오류 메시지가 나타납니다.연결이 끊긴 후 Oracle 연결 풀을 자동으로 다시 연결하는 방법은 무엇입니까?

닫힌 연결.

페이지를 새로 고치고 연결을 다시 시도하면 데이터베이스가 다시 연결되므로 네트워크 나 데이터베이스에 문제가없는 것 같습니다. Oracle 연결 풀이 연결의 유효성을 검사하고 어떤 이유로 든 풀의 연결이 끊어진 경우 다시 연결하는 방법입니까?

내가 아파치 톰캣 6.0.18, 11.

자바 EE6 업데이트를 사용하고 (오라클 얇은 드라이버에서 핑 기능이있는 것 같습니다 것은. 그 도움을 수행하고 나는 그것을 어디에서 찾을 수 있습니까?)

+2

1) 당신은 휴일 연결 2) InactivityTimeout, TimeToLiveTimeout 또는 AbandonedConnectionTimeout이 아닌 기본 값으로 설정 했는가에 대한 전체 스택 추적을 추가 할 수 있습니까? 3) ValidateConnection을 사용합니까? –

+0

4) 응용 프로그램 서버와 DB 서버 간의 물리적 연결이 네트워크 수준에서 끊어지고 있습니까? 방화벽으로? –

+0

어디에서 이러한 매개 변수를 설정합니까? 필자는 오라클 프로그래밍에 익숙하지 않으므로 이러한 매개 변수를 어디에서 찾을 수 있을지 잘 모릅니다. ValidateConnection을 찾고 어디에서 다시 연결할 수 있습니까? (오류가 발생한 직후 브라우저를 새로 고치면 즉시 문제가 해결 될 것입니다. 방화벽 문제인지 확실하지 않습니다.) – futureelite7

답변

-1

C3P0과 같은 다른 연결 풀 라이브러리를 사용하고 자동 reconnect의 기능을 사용하십시오.

0

Apache DBCP (DB 연결 풀)가 여기에 도움이 될 것입니다. 'validationQuery'매개 변수를 사용하여 구성 할 수 있습니다.이 매개 변수는 풀에서 제거 된 연결에서 실행되는 SQL 쿼리입니다. 쿼리가 실패하면 연결이 취소되고 새 연결이 생성되어 사용자에게 전달됩니다.

자세한 내용은 http://commons.apache.org/proper/commons-dbcp/configuration.html을 참조하십시오.

참고 : validationQuery는 풀에서 연결될 때마다 호출되므로 가능한 한 빨리해야합니다. 예 :

SELECT id FROM users LIMIT 1; 
0

일부 구성 매개 변수를 context.xml에 추가하여 tomcat 연결 풀에서 연결이 끊어 지도록 할 수 있습니다. 다음은 context.xml의 한 예입니다. 설정에 따라 user/password/url/ports 등을 사용하십시오.

<?xml version="1.0" encoding="UTF-8"?> 
<Context path=""> 
    <!-- Specify a JDBC data source --> 
    <Resource name="jdbc/db" auth="Container" 
       type="javax.sql.DataSource" 
       username="user" 
       password="password" 
       driverClassName="driver.class.fullpath" 
       url="jdbc:oracle://localhost:3306/ 
       maxActive="50" 
       maxIdle="10" 
       testOnBorrow="true" 
       testWhileIdle="true" 
       validationQuery="/* ping */" 
       removeAbandoned="true" 
       logAbandoned="true"/> 
</Context> 
관련 문제