處理數據庫死鎖

1.首先咱們須要判斷是哪一個用戶鎖住了哪張表.sql

 

--查詢被鎖表
select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

 

查詢後會返回一個包含spidtableName列的表.session

其中spid是進程名,tableName是表名.code

 

2.瞭解到了到底是哪一個進程鎖了哪張表後,須要經過進程找到鎖表的主機.blog

--查詢主機名
exec sp_who2 'xxx'

xxx就是spid列的進程,檢索後會列出不少信息,其中就包含主機名.進程

 

3.經過spid列的值進行關閉進程.ci

--關閉進程
declare @spid  int 
Set @spid  = xxx --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

 

PS:有些時候強行殺掉進程是比較危險的,因此最好能夠找到執行進程的主機,在該機器上關閉進程.it

相關文章
相關標籤/搜索