select大家發現,上面這條sql語句用到了oracle的兩個檢視和乙個表,分別是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;
v$locked_object、v$session、dba_objects
:
v$locked_object
檢視中記錄了所有session中的所有被鎖定的物件資訊。
v$session
檢視記錄了所有session的相關資訊。
dba_objects
為oracle使用者物件及系統物件的集合,通過關聯這張表能夠獲取被鎖定物件的詳細資訊。
eg:現在我通過scott使用者執行dml語句
select * from emp for update;或者update scott.emp set sal = '2000' where empno='7788';
之後一直不進行提交,然後通過system使用者執行上面的查詢oracle中被鎖表的sql語句,就會找到如下記錄:
username:oracle使用者名稱
sid:程序號
serial#:序列號
object_name:表名
osuser:作業系統使用者名稱
machine:機器名
program:操作工具
logon_time:登陸時間
lockwait:表示當前這張表是否正在等待其他使用者解鎖這張表
locked_mode:鎖表模式(下面詳細說明)
注意:這時候如果通過system使用者執行select * from scott.emp for update;
語句就無法成功執行。
通過第一步查出來的資訊找到被鎖的表之後執行如下語句解鎖該錶:
alter system kill session '注意:sid和seial#就是第一步中查詢出來的程序號和序列號。sid,seial#
';
eg:解除第一步中表的鎖
alter system kill session '現在通過system再次執行dml語句10,15
';
select * from scott.emp for update;或update scott.emp set sal = '2000' where empno='7788';
就可以了。
oracle 檢視鎖 與 解鎖
解鎖 alter system kill session sid,serial 查詢鎖表使用者 select sess.sid,sess.serial lo.oracle username,lo.os user name,ao.object name,lo.locked mode from v lo...
oracle 檢視鎖表和解鎖
檢視鎖表select l.session id sid,s.serial l.locked mode,l.oracle username,l.os user name,s.machine,s.terminal,o.object name,s.logon time from v locked obje...
Oracle檢視鎖表和解鎖
注意許可權問題 1.檢視是否有被鎖的表 select b.owner,b.object name,a.session id,a.locked mode from v locked object a,dba objects b where b.object id a.object id 2.檢視是哪個...