• SQL查死锁进程,并结束死锁进程ID,如结束不掉可能是正被使用或占用,查找原因再Kill


    查死锁以及出现锁定的语句及进程ID
    --如果发现死锁进程ID  则可以使用  Kill SPID 的方式终止进程

    CREATE Table #Who(spid int,
        ecid 
    int,
        status 
    nvarchar(50),
        loginname 
    nvarchar(50),
        hostname 
    nvarchar(50),
        blk 
    int,
        dbname 
    nvarchar(50),
        cmd 
    nvarchar(50),
        request_ID 
    int);

    CREATE Table #Lock(spid int,
        dpid 
    int,
        objid 
    int,
        indld 
    int,
        
    [Type] nvarchar(20),
        Resource 
    nvarchar(50),
        Mode 
    nvarchar(10),
        Status 
    nvarchar(10)
    );

    INSERT INTO #Who
        
    EXEC sp_who active  --看哪个引起的阻塞,blk 
    INSERT INTO #Lock
        
    EXEC sp_lock  --看锁住了那个资源id,objid 

    DECLARE @DBName nvarchar(20);
    SET @DBName='IRMManage'

    SELECT #Who.* FROM #Who WHERE dbname=@DBName
    SELECT #Lock.* FROM #Lock
        
    JOIN #Who
            
    ON #Who.spid=#Lock.spid
                
    AND dbname=@DBName;

    --最后发送到SQL Server的语句
    DECLARE crsr Cursor FOR
        
    SELECT blk FROM #Who WHERE dbname=@DBName AND blk<>0;
    DECLARE @blk int;
    open crsr;
    FETCH NEXT FROM crsr INTO @blk;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN;
        
    dbcc inputbuffer(@blk);
        
    FETCH NEXT FROM crsr INTO @blk;
    END;
    close crsr;
    DEALLOCATE crsr;

    --锁定的资源
    SELECT #Who.spid,hostname,objid,[type],mode,object_name(objid) as objName FROM #Lock
        
    JOIN #Who
            
    ON #Who.spid=#Lock.spid
                
    AND dbname=@DBName
        
    WHERE objid<>0;

    DROP Table #Who;
    DROP Table #Lock;
  • 相关阅读:
    js 跳转链接的几种方式
    js 指定分隔符连接数组元素join()
    Ajax async属性
    非负数正则表达式
    firefox因 HTTP 严格传输安全(HSTS)机制无法打开网页
    查看linux系统某宏的定义(另类)
    ctags高级用法
    ctags简明用法
    关于数组和指针的一道例题的解读
    让gcc和gdb支持intel格式的汇编
  • 原文地址:https://www.cnblogs.com/hanguoji/p/1820294.html
Copyright © 2020-2023  润新知