• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle数据表中的死锁情况解决方法
    POST TIME:2021-10-18 22:03

    在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定:
    1.查找被锁定的表:

    select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status 
    from v$locked_object l, all_objects a 
    where l.object_id=a.object_id;
    

    如果想知道具体是哪个进程阻塞了哪个进程,可用以下语句查看:

    select username,v$lock.sid,trunc(id1/power(2,16)) rbs,bitand(id1,to_number('ffff','xxxx'))+0 slot,id2 seq,lmode,request from v$lock, v$session where v$lock.type = 'TX' and v$lock.sid = v$session.sid and v$session.username = 'CENTER' ;
    


     select
     (select username||':'||sid||':'||serial# from v$session where sid=a.sid) || 
     ' 阻塞了 ' || 
     (select username ||':'||sid||':'||serial# from v$session where sid=b.sid) 
     from v$lock a, v$lock b 
     where a.block = 1 
     and b.request > 0 
     and a.id1 = b.id1 
     and a.id2 = b.id2;
    

    2.确定锁定表用户的sid与serial编号(可通过oracle用户确定也可通过系统用户确定)
    a.通过oracle用户确定

    select sid,serial# from v$session where username='center';
    

    b.通过系统用户确定

    select sid,serial# from v$session where username='administrator';
    
    

    3.杀掉造成死锁的进程(已知是123阻塞了124号进程,杀掉即可解锁)

    alter system kill session ‘123,3935';
    

    至此表死锁解除,现在存在的是数据表正常的锁定,等事务提交后自然消失.

    oracle rac 死锁检测机制
    rac环境下,死锁的检查是通过LMD进程来完成的,该进行默认情况下是60s 工作一次,也就是说死锁的检查至少需要1分钟甚至更长的时间,跟系统负载有关。
    另外就是rac环境下,死锁的检测要在所有节点之间来回的通信,所以相对单机环境下,就要慢很多。其中隐含参数_lm_dd_interval 控制LMD工作的频率(一般情况下,不要调整该参数)

    如何避免死锁?
    对应oracle内部死锁,oracle自己会进行处理,但是由于应用方面导致的死锁或人为导致的死锁,那么需要进行人工干预。
    Oracle死锁产生的四个必要条件如下:
    1)资源不能被共享,只能由一个进程使用。
    2)已经得到资源的进程可以再次申请新的资源。
    3)已经分配的资源不能从相应的进程中被强制地剥夺。
    4)系统中若干进程组成环状,环状中每个进程都在等待相邻进程正占用的资源。

    您可能感兴趣的文章:
    • Oracle 查询死锁并解锁的终极处理方法
    • 讲解Oracle数据库中结束死锁进程的一般方法
    • 简单说明Oracle数据库中对死锁的查询及解决方法
    • oracle 会话 死锁 执行sql 执行job的方法
    • Oracle删除死锁进程的方法
    • Oracle对于死锁的处理方法
    • Oracle外键不加索引引起死锁示例
    • Oracle 死锁的检测查询及处理
    上一篇:简单说明Oracle数据库中对死锁的查询及解决方法
    下一篇:讲解Oracle数据库中结束死锁进程的一般方法
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信