본문 바로가기
IT이야기/개발

Oracle 세션(Session) 이란?

by 행복찾아3만리 2021. 12. 28.
반응형

안녕하세요.

 

이번 글에서는 Oracle 세션(Session)이 무엇인지와 어떻게 확인하는지에 대해 알아보도록 하겠습니다.

 

목차
1. Oracle 세션(Session)이란?
2. 락(Lock) 이란?
3. 데드락(DeadLock)(교착상태) 이란?
4. 세션 다루는 쿼리

1. Oracle 세션(Session)이란?

사용자가 오라클 데이터베이스에 접속을 하게 되면 세션이 생성됩니다. 이 세션은 사용자가 데이터베이스에서 접속 종료까지 계속 유지됩니다. 각 세션에는 고유한 SID(Session identifier)와 SERIAL#(serial number)를 가지고 있습니다. 시리얼 번호는 세션이 종료되어도 다른 세션이 동일한 SID를 갖고 시작했을 때 정확한 세션 객체에 적용될 수 있도록 보장해줍니다.

 

2. 락(Lock) 이란?

데이터베이스에는 여러 세션이 접근을 할 수 있습니다. 이때 특정 세션이 테이블의 데이터를 변경한다면 그 데이터가 확정되기(커밋, 롤백) 전까지 다른 세션은 조작이 불가능한 상태가 됩니다. 이 상태를 락(Lock)이라고 합니다.

 

3. 데드락(DeadLock)(교착상태) 이란?

데드락이란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어 작업이 완료되지 못하는 상태를 말합니다. 예시로 A와 B 트렌젝션이 있습니다. A 트렌젝션은 USER라는 테이블에 홍길동 데이터를 수정하고 B 트렌젝션은 ORDER라는 테이블에 치킨 데이터를 수정합니다. 두 트렌젝션이 종료가 되지 않고 A 트렌젝션은 ORDER 테이블에 치킨 데이터를 수정하려고 하고 B 트렌젝션은 USER 테이블에 홍길동 데이터를 수정하려고 합니다. 이때 A 트렌젝션이 ORDER테이블에 치킨 데이터를 수정하려고 하면 이미 B 트렌젝션이 해당 데이터를 잡고 있어서 수정을 하지 못합니다. 반대로 B 트렌젝션 또한 이미 A 트렌젝션이 USER 테이블에 홍길동 데이터를 잡고 있어서 수정을 못하게 됩니다. 이처럼 두 작업이 상대의 트렌젝션이 끝날때까지 하염없이 기다리는 상태를 데드락이라고 합니다. 

 

4. 세션 다루는 쿼리

- 'processes', 'sessions', 'transactions' 현재 접속 수

SELECT * 
FROM V$RESOURCE_LIMIT 
WHERE RESOURCE_NAME IN ('processes', 'sessions', 'transactions')

- 세션 확인

SELECT * FROM V$SESSION;

- 락 걸린 테이블 확인

SELECT
  A.SID,      
  A.SERIAL#, 
  A.STATUS,   
  A.PROCESS,   
  A.USERNAME, 
  A.OSUSER,   
  B.SQL_TEXT,  
  C.PROGRAM   
FROM
  V$SESSION A,
  V$SQLAREA B,
  V$PROCESS C
WHERE
  A.SQL_HASH_VALUE=B.HASH_VALUE
  AND A.SQL_ADDRESS=B.ADDRESS
  AND A.PADDR=C.ADDR
  AND A.STATUS='ACTIVE';

- 세션 Kill

ALTER SYSTEM KILL SESSION 'SID, SERIAL#';

 

반응형

댓글