fly'sBlog

导航

SqlServer 数据库表死锁

数据库表死锁

 spid   锁表进程
tableName   被锁表名

declare @spid  int
Set @spid  = 618 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

 

 

 

 
SELECT
    tl.request_session_id AS spid,
    OBJECT_NAME(tl.resource_associated_entity_id) AS tableName,
    er.status,
    er.command,
    est.text AS sql_text
FROM
    sys.dm_tran_locks AS tl
LEFT JOIN
    sys.dm_exec_requests AS er ON tl.request_session_id = er.session_id
CROSS APPLY
    sys.dm_exec_sql_text(er.sql_handle) AS est
WHERE
    tl.resource_type = 'OBJECT'

 

 

DECLARE @kill_spid NVARCHAR(10)
DECLARE spid_cursor CURSOR FOR
SELECT
    CAST(tl.request_session_id AS NVARCHAR(10)) AS spid
FROM
    sys.dm_tran_locks AS tl
LEFT JOIN
    sys.dm_exec_requests AS er ON tl.request_session_id = er.session_id
CROSS APPLY
    sys.dm_exec_sql_text(er.sql_handle) AS est
WHERE
    tl.resource_type = 'OBJECT' -- 请根据实际情况调整这里的条件
OPEN spid_cursor
FETCH NEXT FROM spid_cursor INTO @kill_spid
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC('KILL ' + @kill_spid)
    FETCH NEXT FROM spid_cursor INTO @kill_spid
END
CLOSE spid_cursor
DEALLOCATE spid_cursor

 

posted on 2023-11-24 16:21  fly'sBlog  阅读(26)  评论(0)    收藏  举报