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을 넘지 않는다!
'DBMS > Oracle' 카테고리의 다른 글
[Oracle] ORA-02303: type body SDE.ST_GEOMETRY error (0) | 2020.07.24 |
---|---|
[Oracle] ORA-12518 TNS:listener could not hand off client connection (0) | 2020.07.13 |
[Oracle] ora-01552 cannot use system rollback segment for non-system tablespace '%s' (0) | 2020.06.15 |
[Oracle] Oracle expdp 중 ORA-01555 에러 해결방법 (0) | 2020.06.04 |
[Oracle] Mybatis (select, insert, update, delete 문) 예제 (0) | 2020.05.20 |
최근댓글