안녕하세요.
이번 글에서는 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#';
댓글