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 서비스를 재시작해 줍니다. 이후 정상 동작을 확인하였습니다.

 

 

 

 

 

반응형

+ Recent posts