새싹 DBA/Scripts

[오라클] 락 정보 조회 및 kill session 스크립트

LIMMI 2024. 8. 16. 15:26

오라클 락 정보 조회 및 kill session

dbms_datapump 패키지를 사용하면서 펌프 작업중 발생하는 에러를 출력하려다 lock 걸려있는 impdp 작업 조회, kill session 후 락테이블 삭제하는 작업을 진행함.

>>간단조회 select * from v$locked_object;

SELECT /*+ ordered */
                      LEVEL lvl,
                      NVL (s.blocking_session, s.sid)
                          lck_hold,
                      CASE WHEN s.blocking_session IS NOT NULL THEN s.sid END
                          lck_wait,
                      s.username,
                      s.osuser,
                      s.status,
                      l.TYPE TYPE,
                      -- fn_sec_to_time (l.ctime) lock_tm,
                      DECODE (lmode,
                              0, 'NONE',
                              1, 'NULL',
                              2, 'row-S(SS)',
                              3, 'row-X(SX)',
                              4, 'share(S)',
                              5, 'S/Row-X(SSX)',
                              6, 'exclusive(X)')
                          HOLD,
                      o.name object,
                      l.id1,
                      l.id2,
                      DECODE (l.request,
                              0, 'NONE',
                              1, 'NULL',
                              2, 'row-S(SS)',
                              3, 'row-X(SX)',
                              4, 'share(S)',
                              5, 'S/Row-X(SSX)',
                              6, 'exclusive(X)') REQUEST,
                      s.event,
                      s.machine,
                      s.module,
                      s.program,
                      s.sql_id,
                      s.blocking_session,
                      l.ctime,
                      o.obj#,
                      t.name TYPE_NM,
                      t.id1_tag,
                      t.id2_tag,
                      s.sid,
                      s.serial#,
                         'ALTER SYSTEM KILL SESSION ''' || S.sid || ',' || S.serial# || ''';'  CMD_KILL,
                         'ALTER SYSTEM DISCONNECT SESSION '''|| S.sid || ','|| S.serial#|| ''' IMMEDIATE;'  CMD_DISCONNECT
                 FROM V$lock l,
                      V$session s,
                      sys.obj$ o,
                      V$lock_type t
                WHERE     1 = 1
                      AND s.TYPE != 'BACKGROUND'
                      --  and s.username = 'EP_APP'
                      --  and s.sid = 4179
                      AND l.sid = s.sid
                      AND l.TYPE IN ('TM', 'TX', 'UL')
                      AND o.obj#(+) = DECODE (L.ID2, 0, L.ID1, -1)
                      AND t.TYPE = l.TYPE
           CONNECT BY     PRIOR s.sid = s.blocking_session
                      AND PRIOR l.id1 = l.id1
                      AND PRIOR l.id2 = l.id2
           START WITH s.blocking_session IS NULL
    ORDER SIBLINGS BY lock_tm DESC, lck_hold
--order by lck_hold, l.ctime desc, l.sid
;

 

http://dbcafe.co.kr/wiki/index.php/ORACLE_%EB%9D%BD_%EC%A0%95%EB%B3%B4#LOCK_.EA.B1.B8.EB.A6.B0_.EA.B0.9C.EC.B2.B4_.ED.99.95.EC.9D.B8_.EB.B0.8F_LOCK_.ED.95.B4.EC.A0.9C