ORA-12516 tns:listener could not find available handler with matching protocol stack.
ORA-12516 tns:리스너가 프로토콜 스택과 일치하는 처리기를 찾을 수 없습니다.
1. 현상
개발 환경에선 발생하지 않다가 배포 환경에서 프로그램을 올리던 중에 몇몇 프로그램이 시작과 동시에 죽는 문제가 발생했습니다. 로그를 확인해보니 Oracle DB 접속 문제였으며 Oracle 로그를 확인한 결과 ORA-12516 tns:listener could not find available handler with matching protocol stack. 와 같은 에러 로그가 찍혀있었습니다.
2. 원인
가장 대표적인 원인은 오라클 DB에 붙을 수 있는 프로세스 혹은 세션의 개수가 최대치에 도달한 것. 이미 접속되어 있는 것은 잘 동작하지만 새로운 프로그램이 DB에 접속할 때 DB는 이미 자신이 허용할 수 있는 연결의 최대치에 도달했기 때문에 에러를 반환하는 현상입니다.
3. 수정
현재 DB 설정값을 먼저 확인해줍시다. SYSDBA 계정으로 로그인 한 뒤 다음 쿼리를 실행해 주세요.
SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ('processes', 'sessions');
제 상황의 경우 결과가 모두 LIMIT_VALUE에 근접해 있어 추가적인 프로그램을 실행하면 오라클 에러가 발생하던 상황이었습니다. 따라서 다음 명령어를 통해 processes의 개수와 sessions의 개수를 늘려 주었습니다.
ALTER SYSTEM SET PROCESSES = NNN SCOPE = SPFILE;
ALTER SYSTEM SET SESSIONS = NNN SCOPE = SPFILE;
* NNN에 원하는 수치를 넣으시면 됩니다.
"System SET이(가) 변경되었습니다."라는 메시지를 확인하신 뒤 DB 서비스를 재시작해 줍니다. 이후 정상 동작을 확인하였습니다.
'Programming > Databse' 카테고리의 다른 글
[DBMS] SQLite vs MySQL vs PostgreSql: 관계형 DB 시스템의 비교. - (2) MySQL (2) | 2020.11.17 |
---|---|
[DBMS] SQLite vs MySQL vs PostgreSql: 관계형 DB 시스템의 비교. - (1) SQLite (0) | 2020.11.17 |
[Postgresql] PostGraphile: Instant GraphQL API (3) | 2020.04.05 |
[PostgreSQL] DB 및 유저 생성과 pgAdmin4 (0) | 2020.03.29 |
[PostgreSQL] Postgresql 외부 접속 허용 (0) | 2020.03.29 |