2017-04-07 1 views
-1

Tomcat에서 실행되는 웹 응용 프로그램을 DataSource를 통해 Oracle DB에 연결합니다. 나는 사용자가 연결되어 있지 않더라도 응용 프로그램이 시작되자 마자 연결 풀이 가득 차 있기 때문에 이상한 행동을 해왔습니다!이 쿼리의 출처는 어디입니까?

select value$ from props$ where name = 'global_db_name' 

연결에 대한 맥락이있다 : I이 실행되고있는 쿼리를 검사 할 때 항상 동일하게 나타납니다

<Context antiResourceLocking="true" crossContext="true" path="/taquillas"> 
    <Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" 
       factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
       jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
       jmxEnabled="true" url="jdbc:oracle:thin:@yyy.yyy.yyy.yyy:zzzz:ANNI" 
       username="xxxxxxxxx" name="jdbc/andrea" password="xxxxxxx" 
       type="javax.sql.DataSource" validationInterval="30000" 
       maxActive="50" minIdle="1" maxWait="10000" defaultAutoCommit="false" 
       initialSize="1" removeAbandonedTimeout="60" 
       removeAbandoned="true" validationQuery="SELECT 1 FROM DUAL"/> 
</Context> 

그리고 데이터 소스는 다음과 같이이다 :

public dbutilsHandler() 
      throws ClassNotFoundException, SQLException, NamingException { 
     this.gson = new GsonBuilder() 
       .setDateFormat("yyyy-MM-dd") 
       .serializeNulls().create(); 
     InitialContext cxt; 
     cxt = new InitialContext(); 
     this.ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/andrea"); 
     this.query = new QueryRunner(ds); 
     this.con = this.query.getDataSource().getConnection(); 
    } 

아무런 연결이 열려 있지 않은지 확인하고 있지만 왜 아직도 일어나고 있는지 이해할 수 없습니다. 도움!

+3

그것을 호출, 또는 아무것도 때, 우리는이 코드가 무엇인지 전혀 모른다. 우리가 말할 수있는 것은 그것이 자바 명명 규칙을 존중하지 않는다는 것이며, 그것은 연결을 열지 만 그것을 닫지는 않는다는 것입니다. –

+1

범인으로 SQL (일반적인 배경 소음이라고 Google이 빠르게 제안하는)을 어떻게 식별하고 있습니까? 연결 풀이 가득 찼다는 것을 어떻게 판단합니까? 그게 무슨 뜻입니까, 50 개의 연결이 있습니까? 아니면 더 이상 열리지 않습니까? 어떤 코드가 오류가 있습니까? 실제로 어떤 오류가 발생합니까? 시작시 응용 프로그램은 무엇을합니까? –

답변

0

prop$은 SYS 테이블입니다. DEFAULT_TEMP_TABLESPACE, NLS_LANG 및 예 (GLOBAL_DB_NAME)와 같은 데이터베이스 속성 값을 보유합니다. Find out more.

당신이 언급 쿼리 ...

select value$ from props$ where name = 'global_db_name' 

은 ...이 응용 프로그램의 SQL을 지원하기 위해 오라클에 의해 생성 된 내부 문 의미합니다 재귀 SQL이다. 일화는 불량 추적 프로세스에 관련된 것, 그래서 당신은 이런 식으로 뭔가를 실행하는 시스템 레벨 트리거가 있는지 여부는 확인 가치 :

alter system set events ‘10046 trace name context forever,level 12’; 
관련 문제