zoukankan      html  css  js  c++  java
  • 找到死锁的进程并取消该死锁的存储过程

    --邹建  
      create   proc   sp_lockinfo  
      @kill_lock_spid   bit=1,             --是否杀掉阻塞的进程,1   杀掉,   0   仅显示  
      @show_spid_if_nolock   bit=1,   --如果没有阻塞的进程,是否显示正常进程信息,1   显示,0   不显示  
      @dbname   sysname=''                     --如果为空,则查询所有的库,如果为null,则查询当前库,否则查询指定库  
      as  
      set   nocount   on  
      declare   @count   int,@s   nvarchar(2000),@dbid   int  
      if   @dbname=''   set   @dbid=db_id()   else   set   @dbid=db_id(@dbname)  
       
      select   id=identity(int,1,1),标志,  
      进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,  
      数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,  
      登陆时间=login_time,打开事务数=open_tran,进程状态=status,  
      工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,  
      域名=nt_domain,网卡地址=net_address  
      into   #t   from(  
      select   标志='阻塞的进程',  
      spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,  
      status,hostname,program_name,hostprocess,nt_domain,net_address,  
      s1=a.spid,s2=0  
      from   master..sysprocesses   a   join   (  
      select   blocked   from   master..sysprocesses    
      where   blocked>0  
      and(@dbid   is   null   or   dbid=@dbid)  
      group   by   blocked  
      )b   on   a.spid=b.blocked    
      where   a.blocked=0  
      and(@dbid   is   null   or   dbid=@dbid)  
      union   all  
      select   '|_牺牲品_>',  
      spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,  
      status,hostname,program_name,hostprocess,nt_domain,net_address,  
      s1=blocked,s2=spid  
      from   master..sysprocesses   a    
      where   blocked<>0  
      and(@dbid   is   null   or   dbid=@dbid)  
      )a   order   by   s1,s2  
       
      select   @count=@@rowcount  
       
      if   @count=0   and   @show_spid_if_nolock=1  
      begin  
      insert   #t  
      select   标志='正常的进程',  
      spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,  
      open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address  
      from   master..sysprocesses  
      where   @dbid   is   null   or   dbid=@dbid  
      order   by   spid  
      set   @count=@@rowcount  
      end  
       
      if   @count>0  
      begin  
      create   table   #t1(id   int   identity(1,1),a   nvarchar(30),b   Int,EventInfo   nvarchar(255))  
      declare   tb   cursor   local  
      for  
      select   N'insert   #t1   exec(''dbcc   inputbuffer('+rtrim(进程ID)+')'')  
      if   @@rowcount=0   insert   #t1(a)   values(null)  
      '+case   when   @kill_lock_spid=1   and   标志=N'阻塞的进程'  
      then   'kill   '+rtrim(进程ID)   else   ''   end  
      from   #t  
      open   tb  
      fetch   tb   into   @s  
      while   @@fetch_status=0  
      begin  
      exec(@s)  
      fetch   tb   into   @s  
      end  
      close   tb  
      deallocate   tb  
      select   a.*,进程的SQL语句=b.EventInfo  
      from   #t   a   join   #t1   b   on   a.id=b.id  
      order   by   a.ID  
      end  
      set   nocount   off  
      go  
  • 相关阅读:
    切割自动贴标机功能、原理与常见问题回答
    WINCE中蓝牙扫描模块现10050,控制器无法找到错误的解决思路
    在WINCE中基于ActiveSync的Socket通信 c#
    cs关于房间分配
    JS判断单、多张图片加载完成
    在网站中添加 React
    tcp读取数据的方法
    微软发布2011年耐用消费品行业微软CRM解决方案 一方水土
    Microsoft Dynamics CRM4.0介绍 一方水土
    徐工集团再度携手瑞泰搭建Call Center管理平台 一方水土
  • 原文地址:https://www.cnblogs.com/yzwdli/p/1407586.html
Copyright © 2011-2022 走看看