SESSION의 STATUS
  • CONNECTED (정상 커넥션 상태)
  • SIGNALED
  • SNIPED (kill 후 정리 중. 언젠간 정리 끝남)
  • DEAD (kill 후 정리실패. DB 재구동 필요함)

select만 발생시킨 세션도 kill -9하면 DEAD 세션으로 빠질 수 있기때문에
TCP로 붙은 세션만 kill -9 날려야됨..



SNIPED SESSION에 대한 해결은
ALTER SYSTEM [KILL | DISCONNECT] SESSION 구문으로 보통 하는듯…?
(앱 단에서 무슨 문제 생기면, 이 자체에도 hang 걸릴 수 있음)



테스트

TCP 커넥션 후 트랜잭션 발생
15:16:49 gSQL> insert into t1 values (1);


1 row created.

15:16:59 gSQL> select SESSION_ID, SERIAL_NO, SESSION_STATUS from v$session where connection_type = 'TCP';


SESSION_ID SERIAL_NO SESSION_STATUS
---------- --------- --------------
         4        91 CONNECTED


1 row selected.

ALTER ~ KILL SESSION은 
KILL SESSION은 해당 세션의 프로세스는 존재하지 않지만 시스템에 남아있는 비정상 세션을 종료한다.
15:17:05 gSQL> alter system kill session 4, 91;

ERR-HY000(13046): session cannot be killed now : process still alive

ALTER ~ DISCONNECT SESSION
15:17:23 gSQL> alter system disconnect session 4, 91;


System altered.

질의 시 communiation link failure
15:17:46 gSQL> commit;


ERR-08S01(11141): Communication link failure

15:18:10 gSQL> select SESSION_ID, SERIAL_NO, SESSION_STATUS from v$session where connection_type = 'TCP';

no rows selected.

session을 sniped, dead 상태로 만들어볼 방법은 없남…재현해보고싶은데.

세션이 sniped 상태로 빠지면, alter system disconnect~ 로 정리하면 된다 (by son)
(참고용) sniped 상태에 대한 문의가 왔는데, 어플리케이션 단에서 뭔가 처리가 안이루어져서(시그널) 우리한테 응답이 안떨어졌기 때문에
계속 정리하지 못하고 sniped 상태로 빠졌던 것… 어플리케이션 자체를 종료하는것으로 해결


+ Recent posts