死鎖查詢1

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

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='STmo'

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章