Monday, September 01, 2008

วิธีเคลียร์ session ที่ Lock Table ใน Oracle

ในกรณีที่เราทำการ update data ใน oracle แต่ยังไม่ทันจะ commit แล้วอยู่ดีๆ เนตเราก็ตัดซะงั้น
พอจะ update อีกที table ก็ถูก lock ไปแล้ว วิธีการแก้ไขคือทำการเคลียร์ session ที่เราทำซะ

SELECT l.inst_id,SUBSTR(L.ORACLE_USERNAME,1,8) ORA_USER, SUBSTR(L.SESSION_ID,1,3) SID,
S.serial#,
SUBSTR(O.OWNER||'.'||O.OBJECT_NAME,1,40) OBJECT, P.SPID OS_PID,
DECODE(L.LOCKED_MODE, 0,'NONE',
1,'NULL',
2,'ROW SHARE',
3,'ROW EXCLUSIVE',
4,'SHARE',
5,'SHARE ROW EXCLUSIVE',
6,'EXCLUSIVE',
NULL) LOCK_MODE
FROM sys.GV_$LOCKED_OBJECT L, DBA_OBJECTS O, sys.GV_$SESSION S, sys.GV_$PROCESS P
WHERE L.OBJECT_ID = O.OBJECT_ID
and l.inst_id = s.inst_id
AND L.SESSION_ID = S.SID
and s.inst_id = p.inst_id
AND S.PADDR = P.ADDR(+)
order by l.inst_id
;


หลังจาก query แล้วจะแสดงเลข sid และ serial ให้นำเลขทั้งสองนี้ไปใส่ในคำสั่งข้างล่างนี้

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;


เป็นอันเสร็จพิธี


ref University Software Development