查看Oracle中是否有锁表的sql

2025-03-26 06:44:08
推荐回答(3个)
回答1:

oracle的锁是个庞大的体系,种类很多,建议你专门搜寻资料学习一下。
从你的问题提问来看,你应该是问事务锁,也就是常见的TX锁,即dml操作带来的锁表。
----------------------------------------------------------------------------------------------------------

你可以用如下语句看到表上锁等待情况:(集群或单实例环境通用)
SELECT DECODE(request,0,'Holder: ','Waiter: ')||inst_id , sid ,
id1, id2, lmode, request, type,CTIME
FROM GV$LOCK
WHERE (id1, id2, type) IN
(SELECT id1, id2, type FROM GV$LOCK WHERE request>0)
ORDER BY id1, request;

然后根据查出的sid,寻找sql语句:
select s.USERNAME,s.SID||','||s.SERIAL#,'kill -9 '||p.SPID,s.STATUS,s.SQL_ID,s.STATE,s.EVENT,s.WAIT_CLASS,s.PROGRAM,s.MACHINE,s.SECONDS_IN_WAIT,s.LAST_CALL_ET,sq.SQL_TEXT ,sq.SQL_FULLTEXT,s.USERNAME from v$session s,v$sqlarea sq ,v$process p
where s.PADDR = p.ADDR and s.SQL_ID = sq.SQL_ID(+)
and s.SID = 355 ;
------------------------------------------------------------------------------------
上面查找锁的sql语句,需要你学习下锁的级别,类型等知识。

回答2:

select *
from V$locked_Object;就能看到那个object被锁了。
如果想知道对象具体是什么,在关联一下user_objects就能知道了。

回答3:

执行这条语句就 创建了一个独占锁了
select * from table_name for update;