티스토리 뷰

DB/Oracle

Oracle lock session 처리하기

Tomining 2016. 7. 14. 17:36
하나의 DB 장비에 여러 사람 또는 여러 장비에서 쿼리를 수행하다보면 Table Lock 이 발생하여 더 이상 쿼리를 수행하지 못하는 경우가 있습니다.
너무 무거운 쿼리가 수행되어 일정시간이 지난 후 lock 풀리거나 하면 다행이지만 deadlock 처럼 무한 대기하는 경우는 별도의 처리가 필요합니다.

oracle DB 에서 Session 정보를 어떻게 확인하고 lock 이 발생한 Session 을 어떻게 kill 하는지에 대해서 정리해 보았습니다.

Session 확인하기

Oracle 의 Session 정보는 v$session 테이블을 조회하여 확인할 수 있습니다.

select *
from v$session;
특정 계정의 Session 을 확인하고자 한다면?

select *
from v$session
where username = ‘계정명’;
현재 Active 한 Session 을 확인하려면?

select *
from v$session
where status = ‘ACTIVE’;

v$session 테이블에 있는 적절한 컬럼을 이용하여 조건절을 구성하면 좀 더 상세히 조회할 수 있습니다.
컬럼들의 상세 정보를 확인하고자 하신다면 아래 oracle 페이지를 참고하시면 됩니다.

Active 한 Session 이 아니라 Lock 발생하고 있는 Session 을 찾아 내려면 몇 가지 테이블을 더 확인해야 합니다.
v$lock 테이블을 활용하면 현재 Lock 발생하는 Session 을 찾아 낼 수 있습니다.

어떤 테이블에서 Lock 이 발생하는지 확인하려면 아래와 같이 확인 할 수 있습니다.

select *
from v$session a, v$lock b, dba_objects c
where a.sid = b.sid
and b.id1 = c.object_id
and b.type = 'TM'
and c.object_name=‘Lock 걸린 테이블명';


Session Kill 하기

Session 을 Kill 하기 위해서는 v$session 테이블의 sid 와 serail# 정보가 필요합니다.

select a.sid, a.serial#
from v$session a, v$lock b, dba_objects c
where a.sid = b.sid
and b.id1 = c.object_id
and b.type = 'TM'
and c.object_name=‘Lock 걸린 테이블명';
|| sid || serial# ||
| 1234 | 5678 |
alter system kill session ‘1234,5678';

sid값,serial#값 으로 session 을 kill 할 수 있습니다.

P.S Lock session 을 무조건 Kill 하기 보다는 왜 Lock 발생했는지 먼저 확인하여 원인을 해결하는 작업이 선행되어야 할 것입니다.



참고 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함