• Sql解锁 数据库死锁检测


    USE [DataBaseName]
    GO
    /****** Object:  StoredProcedure [dbo].[sp_check_deadlock]    Script Date: 07/04/2014 13:49:30 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    ALTER procedure [dbo].[sp_check_deadlock]
      as
    set nocount on
      /*
      select
      spid As 被锁进程ID,
      blocked As 锁进程ID,
      status  As 被锁状态,
      SUBSTRING(SUSER_SNAME(sid),1,30) 被锁进程登陆帐号,
      SUBSTRING(hostname,1,12) As 被锁进程用户机器名称,
      SUBSTRING(DB_NAME(dbid),1,10) As 被锁进程数据名称,
      cmd 被锁进程命令,
      waittype 被锁进程等待类型
      FROM master..sysprocesses
      WHERE blocked>0
      
      --dbcc inputbuffer(66) 输出相关锁进程的语句
      -- kill 24   杀掉被锁进程
       */
      
      --创建锁进程临时表
      CREATE TABLE #templocktracestatus ( 
              EventType varchar(max), 
              Parameters INT, 
              EventInfo varchar(max) 
              )
      --创建被锁进程临时表
      CREATE TABLE #tempbelocktracestatus ( 
              EventType varchar(max), 
              Parameters INT,
              EventInfo varchar(max) 
              )
    --创建之间的关联表
    CREATE TABLE #locktracestatus ( 
            belockspid INT, 
            belockspidremark varchar(max), 
            belockEventType varchar(max), 
            belockEventInfo varchar(max), 
            lockspid INT, 
            lockspidremark varchar(max), 
            lockEventType varchar(max), 
            lockEventInfo varchar(max) 
            )
      
      --获取死锁进程
      DECLARE dbcc_inputbuffer CURSOR READ_ONLY
     FOR select spid 被锁进程ID,blocked 锁进程ID  FROM master..sysprocesses   WHERE blocked>0
      
      DECLARE @lockedspid int
      DECLARE @belockedspid int
      
      OPEN dbcc_inputbuffer
      
      FETCH NEXT FROM dbcc_inputbuffer INTO  @belockedspid,@lockedspid    WHILE (@@fetch_status <> -1)
      BEGIN
     
      IF (@@fetch_status <> -2)
      BEGIN
    --print '被堵塞进程' 
    --select @belockedspid 
    --dbcc inputbuffer(@belockedspid) 
    --print '堵塞进程' 
    --select @lockedspid 
    --dbcc inputbuffer(@lockedspid)
       INSERT INTO #tempbelocktracestatus 
       EXEC('DBCC INPUTBUFFER('+@belockedspid+')')
     
       INSERT INTO #templocktracestatus  
       EXEC('DBCC INPUTBUFFER('+@lockedspid+')')
     
       INSERT INTO #locktracestatus 
       select @belockedspid,'被锁进程',a.EventType,a.EventInfo,@lockedspid,'锁进程',b.EventType,b.EventInfo
         from #tempbelocktracestatus  a,#templocktracestatus b
      END
     
      FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid
      END
      
      CLOSE dbcc_inputbuffer
      DEALLOCATE dbcc_inputbuffer
      select * from #locktracestatus
      
      return (0) -- sp_check_deadlock
      -- sp_who
      -- kill 24   杀掉被锁进程
  • 相关阅读:
    PS后期合成,你和大神的差距就这5步!
    欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
    谜题:过桥问题
    《世界是数字的》读书笔记第一部分_硬件篇
    完全偶图K(3,3)与完全图K5是否存在平面表示
    Dijkstar算法的数学原理
    LeetCode 141. Linked List Cycle
    LeetCode 155. Min Stack
    LeetCode 160. Intersection of Two Linked Lists
    LeetCode 165.Compare Version Numbers
  • 原文地址:https://www.cnblogs.com/Gxiaopan/p/4183869.html
Copyright © 2020-2023  润新知