ORA-00018: maximum number of sessions exceeded

Session Full 해결 방안

ORA-00018: maximum number of sessions exceeded


세션의 상태 확인방법
sql문 : select * from v$resource_limit
         // 세션과 프로세스를 확인할 수 있다.

  processes : 프로세스 개수(백그라운드 + dedicate process)

  session : 동시 접속 세션 수

  current_utilization : 현재 접속 카운트

  max_utilization : 오라클을 시작한 이래로 최대로 접속 했을 때의 수치

  initial_allocation : init.ora 파라미터에서 설정한 수치

-----------------------------------------------------------------------------------
해결 방안

       - 오라클 재기동 하지 않는 방법

       - 오라클 재기동 하는 방법



 

* 오라클을 재기동 하지 않는 방안

 

    - 비활성중인 세션을 Kill 합니다. 근본적인 원인을 해결하는 방법은 아니나

정상화 할 수 있도록 할 수 있습니다.

           - 툴을 이용하는 방법과 쿼리를 이용하는 방법 2가지가 있습니다.

 

   1. 토드 이용 시 툴에서 session 접속하여 inactive인 세션들을 kill 합니다.

   2. 쿼리를 이용하여 해당 세션을 Kill

SQL> alter system kill session 'sid, serial#'; // 한 개 지정

 

* 예외상황 *

- alter session으로 kill이 안될 때 (ORA-00031:session marked for kill이 생길때)

  (kill을 하여도 락이 해제 되지 않는 것은 rollback하는 프로세스가 동작을 하여 kill을 해도 mark만 하고 rollback 중인 상태이므로 락이 풀렸다고 볼 수 없기 때문입니다. 어느 정도 시간을 갖고 기다리면, 결국 테이블 락이 해제는 됩니다.)

 

다음 쿼리를 이용하여 pid를 찾아서 서버에서 직접 kill 을 합니다.

SQL>  select vs.sid, vs.username, vs.osuser, vs.process fq_pid, vp.spid bg_pid

from v$session vs, v$process vp

where vs.paddr = vp.addr

order by sid;

오라클 서버 계정에서 kill -9 [bg_pid]

 

* 오라클을 재기동 하는 방안

 

    - 오라클을 재기동해야 하는 단점이 있으나 근본적인 해결방안이 될 수 있습니다.

    - 관련 파일은 init.ora 또는 spfile[SID].ora 입니다.

          오라클 기동 시 spfile[SID].ora 파일을 보고 환경 셋팅을 하여 기동하게 됩니다.

          이 파일이 없으면 기본 파일인 init.ora 이 사용됩니다.

 

1. 쿼리를 이용하여 세션의 수를 수정한 뒤 오라클 재기동

SQL> alter system set processes=[지정하고 싶은 수] scope=spfile;

SQL> alter system set open_cursors=[지정하고 싶은 수] scope=both;

티스토리 툴바