Application Servers & Java

[장애 사례 모음] DB 커넥션 오류와 커넥션 풀 이슈 정리

midworker 2025. 5. 15. 18:49
반응형

[장애 사례 모음] DB 커넥션 오류와 커넥션 풀 이슈 정리

애플리케이션에서 데이터베이스와 연동하는 과정에서 종종 발생하는
커넥션 관련 장애 사례들을 실무 기반으로 정리했습니다.


✅ 1. ORA-12516: listener could not find available handler

🔹 오류 메시지

ORA-12516, TNS:listener could not find available handler with matching protocol stack

🔹 원인

  • DB listener는 연결을 수락했지만,
  • 해당 연결을 처리할 수 있는 프로세스가 부족 (processes 파라미터 초과)

🔹 해결 방법

DB 측

ALTER SYSTEM SET processes=1000 SCOPE=SPFILE;

적용 후 DB 재시작 필요

WAS 측

  • 커넥션 풀 maxActive, maxTotal 조정
  • 커넥션 누수 발생 여부 점검 (close 여부)

✅ 2. ORA-00020: maximum number of processes exceeded

🔹 증상

ORA-00020: maximum number of processes exceeded
  • DB에 접속 자체가 불가

🔹 원인

  • processes 파라미터 초과
  • WAS, 배치, APM, DBA툴 등 전체 접속 수가 한도 초과

🔹 해결

  • SHOW PARAMETER processes;
  • 필요 시 ALTER SYSTEM SET processes=... 증가

✅ 3. 커넥션 풀에서 커넥션 획득 실패

🔹 WAS 로그 예시 (Tomcat / HikariCP / JBoss)

Cannot get a connection, pool exhausted

🔹 원인

  • 커넥션 풀 max 값보다 많은 요청 발생
  • 커넥션이 반환되지 않음 (Connection Leak)

🔹 해결

  • 커넥션 반환 (conn.close()) 확인
  • validationQuery, testOnBorrow로 유효성 점검
  • 불필요한 long query 최소화

✅ 4. 세션 또는 커넥션 타임아웃 문제

🔹 증상

  • 일정 시간 뒤 접속이 끊기거나 오류 발생
  • DB 연결이 끊어졌는데도 WAS는 살아있다고 판단

🔹 해결

Tomcat 설정 예

testOnBorrow="true"
validationQuery="SELECT 1 FROM DUAL"
timeBetweenEvictionRunsMillis="30000"
minEvictableIdleTimeMillis="60000"
  • 일정 주기로 커넥션 유효성 검사
  • 유효하지 않은 커넥션은 제거

✅ 5. DB 리스너 설정 누락

🔹 증상

  • DB는 기동되었지만 외부에서 접속 불가
  • ORA-12541: TNS no listener

🔹 해결

  • listener.ora, tnsnames.ora 설정 확인
  • listener 프로세스 실행 상태 확인:
lsnrctl status

✅ 마무리

DB 커넥션 장애는 대부분 다음 3가지 요소에서 발생합니다:

  1. DB 리소스 한계 (processes, sessions)
  2. WAS 커넥션 풀 설정 오류 (maxActive, timeout 등)
  3. 코드 내 커넥션 반환 누락 또는 연결 유효성 문제

이런 장애는 정기 점검 + 지표 기반 튜닝을 통해 예방하는 것이 최선입니다.


반응형