Study/DB

[Oracle] ora-12516

LoonyHyun 2021. 2. 16. 13:30
반응형

오라클 DB 에서 ORA-12516 에러가 발생

 

에러 내용은

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

 

해당 오류는 보통 DB 는 연결되나, Listener 에서 사용 가능한 처리기 (커넥션) 이 없을 경우 발생한다.

 

위 오류의 원인 확인 시

 

V$RESOURCE_LIMIT 테이블 조회에서

 

RESOURCE_NAME 이 processes 또는 sessions 인 데이터를 확인했을 때

 

CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE 를 확인한다.

SELECT
	RESOURCE_NAME,
	CURRENT_UTILIZATION,
	MAX_UTILIZATION,
	LIMIT_VALUE
FROM V$RESOURCE_LIMIT
WHERE RESOURCE_NAME IN ('processes', 'sessions')

CURRENT 와 MAX 의 값이 LIMIT_VALUE 에 가까울 때 발생할 확률이 높다.

 

꼮 값이 LIMIT 값에 도달하지 못했더라도 발생할 수 있다.

 

해당 오류는 보통 많은 커넥션이 발생하는 프로젝트에서 발생하기에,

다수의 서버에서 한번에 커넥션 생성시 발생할 확률이 높다.

 

만약 LIMIT 가 100 인데, MAX 또는 CURRENT 가 97 인 경우,

3개 이상의 서버 또는 프로세스에서 동시에 커넥션 생성 시 생성할 수 있는 자원(RESOURCE)가 모자르기 때문에,

동시에 오류가 발생한다.

( 위 상황은 실제 경험담 )

 

해결 발법은 DB 의 LIMIT_VALUE 값을 수정해주면 된다.

 

SYSDBA 계정 접속

ALTER SYSTEM SET PROCESSES = (원하는제한값) SCOPE=SPFILE;
ALTER SYSTEM SET SESSIONS = (원하는제한값) SCOPE=SPFILE;

"System SET이(가) 변경되었습니다." 메시지 확인 후

 

DB 재시작을 해주면 된다.

shutdown immediate

startup immediate

 

'Study > DB' 카테고리의 다른 글

[Oracle] 통계정보 확인  (0) 2021.01.15
[Oracle] reorg, hwm, shrink, movement  (0) 2021.01.11
[Oracle] 통계정보 생성  (0) 2021.01.11
[Oracle] Job 등록 / 스케쥴링  (0) 2020.12.23
MariaDB (MySQL) 자주 쓰는 날짜 함수 및 포맷  (0) 2020.12.08