记一次锁表的处理(定位锁的原因及处理)

     在ORACLE中,常常会碰到锁阻塞的问题,这时候 我们就需要 利用ORALCE的给的相关视图查出并定位锁的原因  然后根据业务或者其他的实际情况进行业务上的调整或者代码或参数的修改等


-------1、首先查出阻塞的关系。  (哪个会话阻塞了哪个会话)

select a.sid holdsid,b.sid waitsid,a.type ,a.id1,a.id2,a.ctime from v$lock a,v$lock b
where a.id1=b.id1 and a.id2=b.id2 and a.block = 1 and b.block = 0 ;


-------2、查询出数据库中锁表的信息。 (根据 1 中查出的会话进行对比 看是哪个表被锁住了。)




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;


------3、查询出造成阻塞的SQL (根据 1/2 查出的会话 信息以及 表信息 进行对比 看是哪条SQL造成的锁)


select l.session_id sid,
       s.serial#,
       l.locked_mode,
       l.oracle_username,
       s.user#,
       l.os_user_name,
       s.machine,
       s.terminal,
       a.sql_text,
       a.action
  from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
   and s.prev_sql_addr = a.address
order by sid, s.serial#;


-------4、根据 1 中阻塞的会话 查出这个锁的信息。
select sid,type,id1,id2,lmode,request,block from v$lock where sid in(,) order by sid;
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值