oracle 檢視鎖表,與解鎖

2022-07-31 10:54:10 字數 1780 閱讀 4371

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使用者物件及系統物件的集合,通過關聯這張表能夠獲取被鎖定物件的詳細資訊。

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 '

10,15

';

現在通過system再次執行dml語句

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.檢視是哪個...