1. 应用hang住了,在数据库里查询得知session被其它session block,要把其它session kill掉。
2. 应用跑到中途,突然决定不跑了,需要DBA把他们的session kill掉。
2. 应用跑到中途,突然决定不跑了,需要DBA把他们的session kill掉。
DBA采用的kill session的方法:
1. 在数据库层面 alter system kill session 'sid, serial#';
2. 在某些特殊情况下,方法1无法使用,便在OS层面执行kill -9
例子: 执行某job未成功,查询锁表session及锁定的object .
查找锁及SID, SERIAL# , OBJECT .
SELECT se.inst_id, lk.SID, se.serial#, se.username, se.OSUser, se.Machine,
DECODE (lk.TYPE,'TX', 'Transaction','TM', 'DML','UL', 'PL/SQL User Lock',lk.TYPE)
lock_type, DECODE (lk.lmode,0, 'None',1, 'Null',2,'Row-S (SS)',3, 'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR (lk.lmode))
mode_held, DECODE (lk.request,0, 'None',1, 'Null',2,'Row-S (SS)',3, 'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR (lk.request))
mode_requested, TO_CHAR (lk.id1) lock_id1, TO_CHAR (lk.id2) lock_id2, ob.owner, ob.object_type, ob.object_name,
DECODE (lk.Block, 0, 'No', 1, 'Yes', 2, 'Global') block, se.lockwait
FROM GV$lock lk, dba_objects ob, GV$session se
WHERE lk.TYPE IN ('TM', 'UL') AND lk.SID = se.SID AND lk.id1 = ob.object_id(+)
AND (lk.inst_id = se.inst_id)
DECODE (lk.TYPE,'TX', 'Transaction','TM', 'DML','UL', 'PL/SQL User Lock',lk.TYPE)
lock_type, DECODE (lk.lmode,0, 'None',1, 'Null',2,'Row-S (SS)',3, 'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR (lk.lmode))
mode_held, DECODE (lk.request,0, 'None',1, 'Null',2,'Row-S (SS)',3, 'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR (lk.request))
mode_requested, TO_CHAR (lk.id1) lock_id1, TO_CHAR (lk.id2) lock_id2, ob.owner, ob.object_type, ob.object_name,
DECODE (lk.Block, 0, 'No', 1, 'Yes', 2, 'Global') block, se.lockwait
FROM GV$lock lk, dba_objects ob, GV$session se
WHERE lk.TYPE IN ('TM', 'UL') AND lk.SID = se.SID AND lk.id1 = ob.object_id(+)
AND (lk.inst_id = se.inst_id)
查看其中 OBJECT_NAME = TEMP_DOCUMENT_DLV_MSG_REF
SESSION ID = 2939
SERIAL# = 26036
SESSION ID = 2939
SERIAL# = 26036