• Oracle 表死锁 解决


    问题:更新的Update语句一直在更新 卡在执行update语句的地方。

    清除的方法:

    Oracle表死锁解除

     
    我是在plsql中处理 
    1.先查询 
    select * from v$locked_object v, dba_objects o 
    where v.object_id = o.object_id 
     
    2.记录死锁表的session_id 
     
    3.Tools →Sessions 
    找到session_id对应Sessions窗口里的Sid(可以排下序再找比较快),在Status 列 右键 
    Kill. 
     
    即成,注意要有操作权限的用户才行
     
     
    oracle 数据表死锁解决方法 Oracle
    查询死锁信息的语句:
        select a.owner,  
              a.object_name,  
              b.xidusn,  
              b.xidslot,  
              b.xidsqn,  
              b.session_id,  
              b.oracle_username,  
              b.os_user_name,  
              b.process,  
              b.locked_mode,  
              c.machine,  
              c.status,  
              c.server,  
              c.sid,  
              c.serial#,  
              c.program  
         from all_objects a, v$locked_object b, sys.gv_$session c  
        where (a.object_id = b.object_id)  
          and (b.process = c.process)  
        order by 1, 2  

     ---------------------------------------------

    第一步:查看是否有死锁存在,查出有数据则代表有死锁:

        select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name  from v$process p,v$session a,v$locked_object b,all_objects   c     
        where  p.addr=a.paddr     
        and    a.process=b.process     
        and    c.object_id=b.object_id   
    第二步:查出死锁session的精确信息【sid 为前面语句的session_id】
    SELECT sid, serial#, username, osuser FROM v$session where sid='第一步查询出来的session_id';

     第三步:删除死锁【第一个参数为sid,第二个为serial#】

    alter system kill session 'sid,serial#';
    如果还不能解决,
    select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;  

     其中sid用死锁的sid替换。

        1.exit      
        2.ps -ef|grep spid   



    ---------------------------------------------

    其中spid是这个进程的进程号,kill掉这个Oracle进程。

    -------------------------------------------------分割线

     查询死锁:
    select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from 
    v$process p,v$session a, v$locked_object b,all_objects c 
    where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id 

     

    SELECT sid, serial#, username, osuser FROM v$session where sid='1250';--根据上面的Session_id查询到 serial#
    alter system kill session '1250,29967'---1250就是上面的sid,29967就是上面的serial#
     
     
     
     
     
     
     
  • 相关阅读:
    位移算数符
    蓝桥杯 错误票据(第四届预赛第7题)
    hdu Train Problem I(栈的简单应用)
    ACM YTU 2018 母牛的故事
    ACM YTU 1012 u Calculate e
    C 语言 printf格式控制详解
    ACM YTU 十进制与八进制的转换 (栈和队列) STL栈调用
    ACM HDU 2044 一只小蜜蜂
    ACM YTU 挑战编程 字符串 Problem A: WERTYU
    ACM HDU 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/4472298.html
Copyright © 2020-2023  润新知