天天看點

Oracle鎖表查詢與解除鎖表

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:解除第一步中表的鎖