본문 바로가기
Database/Oracle

[ORACLE] ORA-00020 오류 해결 가이드 : 세션 수 초과의 원인과 진단 전략

by Papa Martino V 2025. 7. 28.
728x90

ORA-00020 오류 해결 가이드 : 세션 수 초과의 원인과 진단 전략
[ORACLE] ORA-00020

 

ORA-00020: maximum number of processes (n) exceeded

Oracle 데이터베이스에서 ORA-00020 오류가 발생하면 이는 단순히 "접속이 안 된다"는 문제가 아니라, 시스템이 감당할 수 있는 최대 세션 또는 프로세스 수를 초과했다는 의미입니다. 이 오류는 실무에서 매우 빈번하게 발생하며, 사용자 경험뿐 아니라 백엔드 배치, API 연동, ETL 작업에도 직접적인 영향을 미칠 수 있습니다. 본 글에서는 ORA-00020 오류의 구조적인 원인을 해부하고, 실전에서 사용하는 진단 SQL 및 해결 전략, 장기적인 대응 방안까지 전문가 시각으로 제시합니다.


1. ORA-00020 오류란?

이 오류는 다음과 같은 상황에서 발생합니다:


ORA-00020: maximum number of processes (300) exceeded

이는 현재 DB 인스턴스에서 설정된 processes 파라미터 값 이상으로 사용자가 접속 시도했을 때 Oracle이 더 이상 세션을 허용할 수 없음을 의미합니다. Oracle에서 하나의 세션(session)은 하나의 프로세스(process)에 의해 생성되며, processes 파라미터는 Oracle 인스턴스가 생성할 수 있는 최대 프로세스 수를 결정합니다. 이 한계치를 초과하면 신규 접속 요청은 거부되고 ORA-00020 오류를 반환하게 됩니다.


2. 주요 원인과 진단 요약

원인 설명 대응 전략
세션 누수 애플리케이션에서 세션 종료 없이 연결 유지 세션 풀 관리 및 연결 종료 명확히
동시 접속 증가 사용자 또는 배치 수 급증 processes 파라미터 상향 조정
백그라운드 작업 충돌 ETL, JOB, REPORT 등 비정상 동시작업 스케줄 분산, 작업 수 제한
클러스터 구성 문제 RAC 또는 Load Balancer 오동작 세션 할당 방식 점검

3. 실무에서의 발생 사례

사례: 대형 이커머스 업체의 결제 오류 발생

오전 11시, 프로모션으로 인해 트래픽이 폭증하면서 주문/결제 시스템이 마비됨. 로그 분석 결과, DB 접속 오류 다수 발생. 대표 오류:


ORA-00020: maximum number of processes (600) exceeded

원인 분석:

  • Spring 기반 API 서버에서 HikariCP 설정 오류로 인해 세션 풀 과다 생성
  • 전체 프로세스 수 초과로 Oracle 신규 접속 거부

해결 절차:

  1. DB 리스너 일시 중지 후 세션 강제 종료
  2. HikariCP 최대 커넥션 수 조정 (ex: 50 → 20)
  3. processes 파라미터 상향 조정 (spfile 사용)

4. 실시간 진단 SQL

현재 사용 중인 세션 수 확인


SELECT COUNT(*) FROM v$session;

현재 프로세스 수 확인


SELECT COUNT(*) FROM v$process;

세션 사용량 상세 분석


SELECT username, status, machine, program, COUNT(*) AS cnt
FROM v$session
GROUP BY username, status, machine, program
ORDER BY cnt DESC;

최대 프로세스 설정값 확인


SHOW parameter processes;

5. 해결 방법 요약

구분 명령어/방법 설명
임시 해결 ALTER SYSTEM KILL SESSION 비정상 세션 강제 종료
영구 해결 ALTER SYSTEM SET processes=1000 SCOPE=SPFILE; DB 재시작 후 적용됨
최대값 확인 SHOW PARAMETER processes 현재 설정 확인
최대값 변경 spfile 사용 권장 pfile일 경우 수동 편집 필요

6. 예방 전략

  • DB 커넥션 풀의 최대값 제어: API 서버, 배치 서버 모두 명시적 설정 필수
  • Spring, Node, Python 등 커넥션 재사용 구조 구현
  • 세션 수 모니터링 자동화: Prometheus + Grafana 또는 OEM 사용
  • 정기적인 Zombie 세션 정리: JOB 또는 스크립트 운영

7. 고급 팁: Connection Leak 추적

세션 누수의 흔한 원인은 애플리케이션에서 커넥션을 획득한 후 반환하지 않는 구조입니다. 이를 추적하기 위해서는 다음 기법을 활용할 수 있습니다:

  1. v$session에서 MODULE 또는 ACTION 컬럼 활용
  2. APM 툴 (예: New Relic, Datadog, Pinpoint) 연동
  3. HikariCP leakDetectionThreshold 설정 활용

8. 결론

ORA-00020 오류는 Oracle 환경의 세션/프로세스 자원 고갈 문제로, 단기적 현상이라기보다는 시스템 구조와 운용 정책의 취약점이 드러나는 신호입니다. 단순히 프로세스 수를 늘리는 것이 해결책이 아니라, 전반적인 세션 관리 체계를 재정비해야 근본적인 개선이 가능합니다. 이 글을 통해 단순한 오류 메시지 이상의 의미를 이해하고, 실무 환경에서 발생할 수 있는 다양한 상황에 유연하게 대응할 수 있길 바랍니다.


출처

  • Oracle® Database Reference 19c
  • Oracle Support Doc ID 840730.1
728x90