1、首先需要判斷是哪個使用者鎖住了哪張表.
查詢被鎖表
select request_session_id spid,object_name(resource_associated_entity_id) tablename
from sys.dm_tran_locks where resource_type=『object』
查詢後會返回乙個包含spid和tablename列的表.
其中spid是程序名,tablename是表名.
2.了解到了究竟是哪個程序鎖了哪張表後,需要通過程序找到鎖表的主機.
查詢主機名
exec sp_who2 『***』
***就是spid列的程序,檢索後會列出很多資訊,其中就包含主機名.
3.通過spid列的值進行關閉程序.
關閉程序
declare @spid int
set @spid = *** --鎖表程序
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
ps:有些時候強行殺掉程序是比較危險的,所以最好可以找到執行程序的主機,在該機器上關閉程序.在這裡插入**片
sql server死鎖解決方案 和 清除快取
死鎖解決方案 問題場景 在客戶那碰到乙個操作卡死的現象 問題解決 1 如何掛鉤是死鎖問題 通過 跟蹤,發現是指執行乙個sql語句超時,因此猜想可能是表鎖住了 select request session id spid,object name resource associated entity i...
sqlserver死鎖阻塞
create proc p lockinfo kill lock spid bit 1,是否殺掉死鎖的程序,1 殺掉,0 僅顯示 show spid if nolock bit 1 如果沒有死鎖的程序,是否顯示正常程序資訊,1 顯示,0 不顯示 as declare count int,s nvar...
模擬 SQLSERVER 死鎖
環境 sqlserver 2008 事務 程序 id n 與另乙個程序被死鎖在鎖資源上,並且已被選作死鎖犧牲品。請重新執行 死鎖原理 如兩個任務 任務1,已經鎖定r1,再進行請求r2任務2,已經鎖定r2,再進行請求r1導致兩個任務都進入了阻塞。sqlserver會選擇乙個進行犧牲。了解了原理後,來段...