--------------解锁
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$locked_object lo,
dba_objects ao,
v$session sess
where
ao.object_id = lo.object_id
and
lo.session_id = sess.sid;
--是查询谁锁定的表,发现多锁定,安全起见,不能全部kill,于是用一下语句判定,谁锁定,谁等待。
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
--如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
--以上的语句可以查询到谁锁了表,而谁在等待。
--以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。
--如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段USN
--找出谁锁定的记录,kill掉就行了。
oracle 查看锁 与 解锁
最新推荐文章于 2022-06-30 15:38:25 发布