대빵's Blog

ORA-01000: maximum open cursors exceeded 관련 버그처리 본문

개발관련

ORA-01000: maximum open cursors exceeded 관련 버그처리

bigzero 2017. 11. 30. 14:37

정확한 원인은 없지만 엑셀 대량(1000 미만)으로 업로드 하는 기능에서 아래와 같은 오라클 에러가 발생함

ORA-01000: maximum open cursors exceeded

 

인터넷 검색해 보니 대부분 프로그램에서 정상적으로 리소스를 정리 하지 않아 발생하는 에러라는 의견

오라클 커서는 JDBC preparedStatement 연관된 설정인 듯함

 

이틀간의 삽질 끝에 해결함

서버환경

Spring 3, Mybatis 3.1.1, JDK 1.7, Tomcat 8.5, CentOS

 

  • 원래 초기 구성은 Tomcat Connection Pool Commons DBCP 1.x 이었음
  • DBCP 1.x org.apache.tomcat.jdbc.pool 변경함

참고 : https://tomcat.apache.org/tomcat-8.5-doc/jdbc-pool.html#org.apache.tomcat.jdbc.pool.JdbcInterceptor

  • 문제는 Connection Pool tomcat jdbc pool 바꾸면 오라클에서 cursor 누수가 발생함.
  • DBCP 1.x 변경하면 cursor 누수가 발생안함.
  • 현재 시점에서 DBCP 1.x 아닌것 같고 원래의 DBCP 2.x 테스트 해보니 cursor 누수가 발생안함.
  • 결론 tomcat jdbc pool 에서 누수가 발생함. 누수의 원인이 jdbc pool 자체적인 버그인지  mybatis tomcat jdbc pool 간의 궁합이 안맞는 건지 알수 없지만 DBCP 2.x 에서는 누수가 발생되지 않는 것으로 보임