SQL檢視死鎖

2022-08-20 11:45:11 字數 2357 閱讀 8687

----檢視sql死鎖

create procedure sp_who_lock    

as      

begin      

declare @spid int      

declare @blk int      

declare @count int      

declare @index int      

declare @lock tinyint       

set @lock=0       

create table #temp_who_lock       

(       

id int identity(1,1),       

spid int,       

blk int      

)       

if @@error<>0 return @@error       

insert into #temp_who_lock(spid,blk)       

select 0 ,blocked        

from (select * from master..sysprocesses where blocked>0)a       

where not exists(select * from  master..sysprocesses where a.blocked =spid and blocked>0)      

union select spid,blocked from  master..sysprocesses where blocked>0       

if @@error<>0 return @@error       

select @count=count(*),@index=1 from #temp_who_lock       

if @@error<>0 return @@error       

if @count=0       

begin      

select '沒有阻塞和死鎖資訊'      

return 0       

end      

while @index<=@count

begin      

if exists(select 1 from #temp_who_lock a where id>@index and exists(select 1 from #temp_who_lock where id<=@index and a.blk=spid))      

begin      

set @lock=1       

select @spid=spid,@blk=blk from #temp_who_lock where id=@index

select '引起資料庫死鎖的是: '+ cast(@spid as varchar(10)) + '程序號,其執行的sql語法如下'      

select  @spid, @blk     

dbcc inputbuffer(@spid)       

dbcc inputbuffer(@blk)       

end      

set @index=@index+1       

end      

if @lock=0        

begin      

set @index=1       

while @index<=@count

begin      

select @spid=spid,@blk=blk from #temp_who_lock where id=@index

if @spid=0       

select '引起阻塞的是:'+cast(@blk as varchar(10))+ '程序號,其執行的sql語法如下'      

else       

select '程序號spid:'+ cast(@spid as varchar(10))+ '被' + '程序號spid:'+ cast(@blk as varchar(10)) +'阻塞,其當前程序執行的sql語法如下'     

dbcc inputbuffer(@spid)     

dbcc inputbuffer(@blk)       

set @index=@index+1       

end      

end      

drop table #temp_who_lock       

return 0       

end            

go在查詢分析器中執行:

exec sp_who_lock

檢視死鎖的SQL語句

use master go declare spid int,bl int declare s cur cursor for select 0 blocked from select from sysprocesses where blocked 0 a where not exists selec...

Oracle檢視死鎖

檢視有哪些表被鎖住 select b.owner,b.object name,a.session id,a.locked mode from v locked object a,dba objects b where b.object id a.object id select b.username...

檢視死鎖p lockinfo

set quoted identifier on go set ansi nulls on go exec proc p lockinfo 0,0 alter proc p lockinfo kill lock spid bit 1,是否殺掉死鎖的程序,1 殺掉,0 僅顯示 show spid if...