鎖表時KILL SESSION及回滾段監控(回滾時間評估)

tolywang發表於2012-10-16
在資料庫的日常維護中,經常出現以下兩種情況,需要DBA手工干預KILL SESSION :
1. 應用hang住了,在資料庫裡查詢得知session被其它session block,要把其它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)
檢視其中 OBJECT_NAME = TEMP_DOCUMENT_DLV_MSG_REF
         SESSION ID  = 2939 
         SERIAL#     = 26036 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-748349/,如需轉載,請註明出處,否則將追究法律責任。

相關文章