728x90
Lock 걸린 Session 조회 후 SID, SERIAL 값 추출

 

아래 쿼리를 통해 Lock 테이블의 SID, SERIAL 조회

 

* Lock Session에 대한 자세한 정보 조회(SPID, SID, SERIAL#, OBJECT_NAME, LOCKED_MODE 등 조회 가능)

SQL>
SELECT C.SPID AS PROCESS_ID
, A.SESSION_ID AS SESSION_ID
, B.SERIAL# AS SERIAL_NO
, A.OS_USER_NAME AS OS_USER_NAME
, A.ORACLE_USERNAME AS ORACLE_USERNAME
, D.OBJECT_NAME AS OBJECT_NAME
, A.LOCKED_MODE AS LOCKED_MODE
, B.STATUS AS STATUS
, B.OSUSER AS OS_USER
, C.PROGRAM AS USER_PROGRAM
FROM V$LOCKED_OBJECT A, V$SESSION B, V$PROCESS C, DBA_OBJECTS D
 WHERE A.SESSION_ID = B.SID
   AND B.PADDR = C.ADDR
   AND A.OBJECT_ID = D.OBJECT_ID;

 

* Lock SQL 쿼리 조회

SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,
A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID
AND X.OBJECT_ID = D.OBJECT_ID
AND A.SQL_ADDRESS = B.ADDRESS
ORDER BY B.ADDRESS, B.PIECE;

 

* SID, SERIAL#만 약식 조회

SQL>
select a.sid, a.serial#, a.username, a.process, b.object_name
from v$session a , dba_objects b, v$lock c
where a.sid=c.sid and b.object_id = c.id1
and c.type = 'TM';

       SID    SERIAL#     USERNAME       PROCESS   OBJECT_NAME   
---------- ---------- ------------ -------------   -----------  
        40      45183         TEST     1572:1292      TB_TABLE

 

SESSION KILL 진행

 

조회된 SID, SERIAL 값을 통하여 SESSION KILL 진행

SQL>
alter system kill session 'sid,serial' immediate;

 

TIP) alter system kill session 구문 생성 방법

SQL>
select 'alter system kill session '''||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 = '테이블 명';

 

4. (추가)OS 프로세스 Kill

 

위와 같이 수행했는데도 불구하고 킬이 되지 않을 경우,
직접 OS 프로세스를 킬함으로써 해결 가능

* SPID 조회

SQL>
select spid
from v$process
where addr = (select paddr
from v$session
where s.sid=조회된SID
and s.serial#=조회된SERIAL#);


* OS에서 Kill

$ kill -9 SPID번호

참고 사이트

https://blog.naver.com/tyboss/70039584044

 

오라클 lock 세션을 kill 하는 방법 (락 해제)

  - 세션 조회 SELECT C.SPID AS PROCESS_ID , A.SESSION_ID AS ...

blog.naver.com

https://daniel5.tistory.com/7

 

오라클 테이블 lock 현상 해결 방안(SESSION KILL)

- ORACLE 11g 기준 1. oracle 접속 및 Lock 걸린 Table 조회 1) lock 걸린 oracle user명을 알 경우 select * from v$locked_object where oracle_username = 'oracle user name'; 2) lock 걸린 oracle user명을 모를 경우 SELECT DISTINCT X.SESSION

daniel5.tistory.com

 

728x90