반응형

Oracle DB  접속 이후 연결이 종료될 때 대처 방법

 

ORA-12518 오류 후, 

ALTER SYSTEM SET PROCESSES = 1000 SCOPE=SPFILE;

을 통해 PROCESS 를 늘려주었지만, 소용이 없었는지 자꾸 1000 을 넘는다.

그래서 현재는 PROCESS LIMIT 이 5000 까지 되었다. 

더이상 늘리면 좋지 않을 것 같아 구글링을 한 끝에 또 다른 방법을 찾았다. 

 

특정 사용자의 PROFILE 에 설정된 LIMIT  때문에 연결이 종료되는 경우일 수도!  (ORA-03113)

 

PROFILE 은 

사용자 계정의 행동에 제약사항을 두기 위해서 사용하는 경우이다.
예를 들면,

1분 이상 활동이 없으면 접속을 강제로 종료

1개월마다 암호를 강제로 변경하도록 만드는 것 등.. 

SELECT PROFILE, RESOURCE_NAME, LIMIT FROM DBA_PROFILES;

위 쿼리를 통해 PROFILE 의 이름을 조회한다.

보통 _NEW 가 붙는다고 하지만 내가 회사에서 사용하는 DB는 전혀 다른 이름이었다. 

(처음 생성시 NEW 가 붙음)

 

해결방법

ALTER PROFILE [PROFILE_NAME] LIMIT
IDLE_TIME 1		-- 접속 후 1분동안 작업이 없을 경우 자동 세션 종료
SESSIONS_PER_USER 2;	-- USER 당 2개의 세션만 허용

나는 이렇게만 설정해주었다.

2가지 경우는 쿼리에 주석처리한 내용 그대로고, 이외에 설정값도 있다.

 

* CONNECT_TIME 60 : OPEN 된 세션을 60초 동안만 사용 가능 

* LOGICAL_READS_PER_SESSION 1024 : 세션이 열려있는 동안 디스크나 메모리에서 읽을 수 있는 DATA BLOCK 의 수가 1024 BLOCK 

 

세션 확인

SELECT * FROM V$RESOURCE_LIMIT;

- CURRENT_UTILIZATION : 현재 접속 COUNT

- MAX_UTILIZATION : SERVICE 재기동 후, 최대로 접속했을 때의 수치 

 

위 작업을 진행한 후, 세션을 확인하면 전보다 훨씬 많이 낮아졌다. 

INITIAL_ALLOCATION 을 처음엔 100 → 500 → 1000 → 5000 으로 바꾸고서

PROFILE 을 변경해주고나니 1300 이상으로 가지 않았다. 

 

그래서 다시 2000으로 변경 후, ORACLE SERVICE  를 재기동하였다.  

재기동 후에는 CURRENT_UTILIZATION, MAX_UTILIZATION 둘다 40을 넘지 않는다!

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기