查看數據庫死鎖和KILL死鎖


在master數據庫下創建一下存儲過程,然后可以通過 exec sp_who_lock 來查看死鎖。然后通過Kill 命令,可以殺死死鎖。

 

 

 

USE [master];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER OFF;
GO
CREATE  PROCEDURE [dbo].[sp_who_lock]
AS
BEGIN 
    DECLARE @spid INT ,
        @bl INT ,
        @intTransactionCountOnEntry INT ,
        @intRowcount INT ,
        @intCountProperties INT ,
        @intCounter INT;
        
    CREATE TABLE #tmp_lock_who
    (
      id INT IDENTITY(1, 1) ,
      spid SMALLINT ,
      bl SMALLINT
    );
    
    IF @@ERROR <> 0 RETURN @@ERROR;
    
    INSERT  INTO #tmp_lock_who( spid ,bl)
    SELECT  0 ,blocked
    FROM    ( SELECT    *
              FROM      sysprocesses
              WHERE     blocked > 0
            ) a
    WHERE   NOT EXISTS ( SELECT *
                         FROM   ( SELECT    *
                                  FROM      sysprocesses
                                  WHERE     blocked > 0
                                ) b
                         WHERE  a.blocked = spid )
    UNION
    SELECT  spid ,blocked
    FROM    sysprocesses
    WHERE   blocked > 0;
            
    IF @@ERROR <> 0 RETURN @@ERROR; 

    -- 找到臨時表的記錄數 
    SELECT  @intCountProperties = COUNT(*) ,@intCounter = 1
    FROM    #tmp_lock_who;
    
    IF @@ERROR <> 0 RETURN @@ERROR;
    
    IF @intCountProperties = 0 
        SELECT  '現在沒有阻塞和死鎖信息' AS message;
        
    -- 循環開始 
    WHILE @intCounter <= @intCountProperties
    BEGIN 
        -- 取第一條記錄 
        SELECT  @spid = spid ,@bl = bl
        FROM    #tmp_lock_who
        WHERE   id = @intCounter; 
        BEGIN 
            IF @spid = 0
                SELECT  '引起數據庫死鎖的是: ' + CAST(@bl AS VARCHAR(10)) + '進程號,其執行的SQL語法如下'; 
            ELSE
                SELECT  '進程號SPID:' + CAST(@spid AS VARCHAR(10)) + '' + '進程號SPID:' + CAST(@bl AS VARCHAR(10))
                        + '阻塞,其當前進程執行的SQL語法如下'; 
            DBCC INPUTBUFFER (@bl ); 
        END;
        -- 循環指針下移 
        SET @intCounter = @intCounter + 1; 
    END;
    
    DROP TABLE #tmp_lock_who;
    RETURN 0; 
END;
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM