<참조> http://nearby2.tistory.com/18
Oracle Session(세션) 관리
글. 수알치 오상문
오라클(다른 데이터베이스도 그렇겠지만) 데이터베이스에 접속하면 Session이 시작된다. 사용자 접속 상태를 유지하기 위해 Session 정보가 이용된다. 사용자와 오라클의 접속이 해지되면 Session 정보도 사라진다.
1. 오라클 세션 라이프사이클
(1) 오라클에 사용자가 접속한다.
(2) 오라클 세션 시작한다.
(3) 오라클은 해당 세션에 ID(SID), 시리얼 번호 할당한다.
SID = Session identifier
SERIAL# = Serial number
[참고] 시리얼 번호는 세션이 종료된 경우 다른 세션이 동일한 SID를 갖고 시작되더라도 세션 명령들이 정확한 세션 객체에 적용될 수 있도록 보장해준다.
(4) 사용자 접속 해제 또는 세션 강제 종료한다.
[참고] 강제 종료 시, 진행 중이던 쿼리 작업은 롤백 된다.
(5) 오라클은 SID 세션을 해제한다.
2. 사용자 세션 확인 (v$session 뷰 쿼리)
v$session 뷰에서 각 세션은 고유 SID와 SERIAL# 정보를 갖는다. 또한 v$session 뷰는 사용자 이름, 장치 이름, 프로그램 이름, 로그인 시간 등 세션에 대한 유욯한 정보를 갖고 있다.
[예] DB에 접속한 사용자 및 수행 프로그램 확인
select username, program from v$session;
3. 세션 강제 종료 (alter system 명령)
사용자 세션을 강제 종료하기 위해서는 v$session 뷰 SID와 SERIAL# 값이 필요하다.
[예] 사용자 SUNNY와 관련된 세션 종료하기
(1) 먼저 SUNNY가 사용하는 세션을 확인한다.
SQL> select username, sid, serial#, status
from v$session
where username = 'SUNNY';
USERNAME SID SERIAL# STATUS
--------------------- -------------- -------------- ----------------
SUNNY 10 3 INACTIVE
(2) 확인한 SID, SERIAL# 값을 이용하여 세션을 제거한다.
SQL> alter system kill session '10, 3';
System altered.
(3) 제거되었는지 확인하기
SQL> select username, sid, serial#, status
from v$session
where username = 'SUNNY';
USERNAME SID SERIAL# STATUS
--------------------- -------------- -------------- ----------------
SUNNY 10 3 KILLED
오라클이 INACTIVE 세션을 강제 종료하면, 상태를 KILLED로 표시한다. 사용자가 해당 세션을 사용하려고 시도하면 에러 메세지가 반환되며 세션 정보는 v$session에서 제거된다.
오라클이 세션을 강제 종료할 떄, 더 이상의 SQL문을 실행할 수 없으며, 강제 종료 시점에 SQL문 실행 중이었다면 해당 SQL 문은 종료되고 모든 변경사항은 롤백된다. 세션에 사용되던 잠금(LOCK) 및 기타 자원도 해제된다.
오라클이 ACTIVE 세션을 강제 종료하면, 오라클이 세션을 종료하고, 해당 세션이 종료되었다는 에러 메시지를 사용자에게 발생시킨다. 오라클이 세션에 의해 사용되던 자원을 60초 이내에 해제할 수 없을 때는 해당 세션이 강제 종료된다는 메시지를 사용자에게 발생시킨다. v$session 뷰 상태는 다시 KILLED로 조회된다.
4. 현재 트랜잭션 완료 후 세션 종료 (DISCONNECT SESSION)
SQL> alter system disconnect session '10', '3' post_transation;
immediate 옵션과 사용하면 진행중인 트랜잭션을 롤백하고 모든 세션 잠금을 해제하며 사용자에게 즉시 제어권을 넘긴다.
SQL> alter system disconnect session '10', '3' immediate;
SQL> alter system kill session '10', '3' immediate;
https://oracle-base.com/articles/misc/killing-oracle-sessions
'DBMS, 데이터베이스' 카테고리의 다른 글
Mongo DB의 한글 Column 값 가져오기 (0) | 2022.06.23 |
---|---|
MySQL 테이블, 컬럼에 한글/특수문자 있는 경우 접근하기 (0) | 2022.06.23 |
Mongo db 사용자 계정 추가와 인증 설정 (0) | 2022.06.17 |
몽고 DB 외부 접속 허용 설정 (0) | 2022.06.17 |
Mongo, TypeError: 'Collection' object is not callable. If you meant to call the 'insert' method on a 'Collection' object it is failing because no such method exists. (0) | 2022.06.17 |