• [SQL]死锁处理语句


    引言

    今天在群里看到分享的解决死锁的sql语句,就想着这东西以后肯定用的着,就下载下来,在这里记录一下,以后查找也方便。

    SQL

     1 SET QUOTED_IDENTIFIER ON
     2 GO
     3 SET ANSI_NULLS ON
     4 GO
     5 CREATE PROCEDURE sp_who_lock
     6 AS
     7     BEGIN
     8         DECLARE @spid INT ,
     9             @bl INT ,
    10             @intTransactionCountOnEntry INT ,
    11             @intRowcount INT ,
    12             @intCountProperties INT ,
    13             @intCounter INT
    14         CREATE TABLE #tmp_lock_who
    15             (
    16               id INT IDENTITY(1, 1) ,
    17               spid SMALLINT ,
    18               bl SMALLINT
    19             )
    20          IF @@ERROR <> 0
    21             RETURN @@ERROR
    22         INSERT INTO #tmp_lock_who ( spid, bl )
    23                 SELECT 0, blocked
    24                     FROM ( SELECT *
    25                             FROM sys.sysprocesses
    26                             WHERE blocked > 0
    27                          ) a
    28                     WHERE NOT EXISTS ( SELECT *
    29                                         FROM ( SELECT *
    30                                                 FROM sys.sysprocesses
    31                                                 WHERE blocked > 0
    32                                              ) b
    33                                         WHERE a.blocked = spid )
    34                 UNION
    35                 SELECT spid, blocked
    36                     FROM sys.sysprocesses
    37                     WHERE blocked > 0
    38         IF @@ERROR <> 0
    39             RETURN @@ERROR
    40        -- 找到临时表的记录数
    41         SELECT @intCountProperties = COUNT(*), @intCounter = 1
    42             FROM #tmp_lock_who
    43          IF @@ERROR <> 0
    44             RETURN @@ERROR
    45         IF @intCountProperties = 0
    46             SELECT N'现在没有阻塞和死锁信息' AS message
    47        -- 循环开始
    48         WHILE @intCounter <= @intCountProperties
    49             BEGIN
    50               -- 取第一条记录
    51                 SELECT @spid = spid, @bl = bl
    52                     FROM #tmp_lock_who
    53                     WHERE Id = @intCounter
    54                 BEGIN
    55                     IF @spid = 0
    56                         SELECT N'引起数据库死锁的是: ' + CAST(@bl AS VARCHAR(10))
    57                                 + N'进程号,其执行的SQL语法如下'
    58                     ELSE
    59                         SELECT N'进程号SPID:' + CAST(@spid AS VARCHAR(10))
    60                                 + N'被进程号SPID:' + CAST(@bl AS VARCHAR(10)) N'阻塞,其当前进程执行的SQL语法如下'
    61                     DBCC INPUTBUFFER (@bl )
    62                 END
    63               -- 循环指针下移
    64                 SET @intCounter = @intCounter + 1
    65             END
    66         DROP TABLE #tmp_lock_who
    67         RETURN 0
    68     END
    69 go
    70 EXEC sp_who_lock
    71 DROP PROC  sp_who_lock
    72 GO
    73 SET QUOTED_IDENTIFIER OFF
    74 GO
    75 
    76 SET ANSI_NULLS ON
    77 
    78 GO
  • 相关阅读:
    PHP程序员7小时学会Kotlin 第二小时
    PHP程序员7小时学会Kotlin系列
    PHP程序员7小时学会Kotlin系列
    技术人员如何形成正确的价值观
    景德镇特色的部门级别与权限
    hhvm的正确安装姿势 http://dl.hhvm.com 镜像
    有钱没钱
    SB心结
    优秀的技术Leader
    BaaS模式的开发思路
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3879050.html
Copyright © 2020-2023  润新知