
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 신규 접속 거부
해결 절차:
- DB 리스너 일시 중지 후 세션 강제 종료
- HikariCP 최대 커넥션 수 조정 (ex: 50 → 20)
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 추적
세션 누수의 흔한 원인은 애플리케이션에서 커넥션을 획득한 후 반환하지 않는 구조입니다. 이를 추적하기 위해서는 다음 기법을 활용할 수 있습니다:
- v$session에서 MODULE 또는 ACTION 컬럼 활용
- APM 툴 (예: New Relic, Datadog, Pinpoint) 연동
- HikariCP leakDetectionThreshold 설정 활용
8. 결론
ORA-00020 오류는 Oracle 환경의 세션/프로세스 자원 고갈 문제로, 단기적 현상이라기보다는 시스템 구조와 운용 정책의 취약점이 드러나는 신호입니다. 단순히 프로세스 수를 늘리는 것이 해결책이 아니라, 전반적인 세션 관리 체계를 재정비해야 근본적인 개선이 가능합니다. 이 글을 통해 단순한 오류 메시지 이상의 의미를 이해하고, 실무 환경에서 발생할 수 있는 다양한 상황에 유연하게 대응할 수 있길 바랍니다.
출처
- Oracle® Database Reference 19c
- Oracle Support Doc ID 840730.1
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ORA-00060 오류 완전 분석 : 데드락 감지와 회피 전략 (0) | 2025.07.28 |
|---|---|
| [ORACLE] ORA-02292 오류 완전 정복 : 자식 테이블 참조로 인한 삭제 실패의 모든 것 (0) | 2025.07.28 |
| [ORACLE] ORA-28040 오류 해결 : 프로토콜 불일치로 인한 인증 실패의 원인과 대책 (0) | 2025.07.28 |
| [ORACLE] ORA-02291 오류 해결 가이드: 무결성 제약 조건 위반의 진짜 원인과 실전 대응 (0) | 2025.07.28 |
| [ORACLE] ORA-12154 오류 해결 : TNS 설정부터 실전 점검까지 (0) | 2025.07.28 |