system kill session “sid,serial#”;或者使用相關作業系統kill程序的指令,如UNIX下kill -9 sid,或者使用其它工具殺掉死鎖程序。
select t2.username,
t2.sid,
t2.serial#,
t3.object_name,
t2.OSUSER,
t2.MACHINE,
t2.PROGRAM,
t2.LOGON_TIME,
t2.COMMAND,
t2.LOCKWAIT,
t2.SADDR,
t2.PADDR,
t2.TADDR,
t2.SQL_ADDRESS,
t1.LOCKED_MODE
from v$locked_object t1, v$session t2, dba_objects t3
where t1.session_id = t2.sid
and t1.object_id = t3.object_id
order by t2.logon_time;
上面這條SQL語句用到了Oracle的兩個視圖和一個表,分别是v$locked_object、v$session、dba_objects:
v$locked_object 視圖中記錄了所有session中的所有被鎖定的對象資訊。
v$session 視圖記錄了所有session的相關資訊。
dba_objects 為oracle使用者對象及系統對象的集合,通過關聯這張表能夠擷取被鎖定對象的詳細資訊。
說明:
username:oracle使用者名
sid:程序号
serial#:序列号
object_name:表名
osuser:作業系統使用者名
machine:機器名
program:操作工具
logon_time:登陸時間
lockwait:表示目前這張表是否正在等待其他使用者解鎖這張表
locked_mode:鎖表模式(下面詳細說明)
第二步:通過擁有管理者權限的使用者解除資料庫中被鎖住的表(SID,SERIAL)
通過第一步查出來的資訊找到被鎖的表之後執行如下語句解鎖該表:
alter system kill session 'sid,seial#';
1
注意:sid和seial#就是第一步中查詢出來的程序号和序列号。
eg:解除第一步中表的鎖