檢視死鎖儲存過程

2021-06-23 05:01:26 字數 1726 閱讀 7442

/****** object:  storedprocedure [dbo].[sp_who_lock]    script date: 08/13/2014 12:52:08 ******/

set ansi_nulls on

goset quoted_identifier on

goalter procedure [dbo].[sp_who_lock]

asbegin

declare @spid int,@bl int,

@inttransactioncountonentry int,

@introwcount int,

@intcountproperties int,

@intcounter int

create table #tmp_lock_who (

id int identity(1,1),

spid smallint,

bl smallint)

if @@error<>0 return @@error

insert into #tmp_lock_who(spid,bl) select 0 ,blocked

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

where not exists(select * from (select * from master.dbo.sysprocesses where blocked>0 ) b

where a.blocked=spid)

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

if @@error<>0 return @@error

-- 找到臨時表的記錄數

select @intcountproperties = count(*),@intcounter = 1

from #tmp_lock_who

if @@error<>0 return @@error

if @intcountproperties=0

select n'現在沒有阻塞和死鎖資訊' as message

-- 迴圈開始

while @intcounter <= @intcountproperties

begin

-- 取第一條記錄

select @spid = spid,@bl = bl

from #tmp_lock_who where id = @intcounter

begin

if @spid =0

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

else

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

dbcc inputbuffer (@bl )

end

-- 迴圈指標下移

set @intcounter = @intcounter + 1

end

drop table #tmp_lock_who

return 0

end

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...

GDB 檢視死鎖

死鎖 一種情形,此時執行程式中兩個或多個執行緒發生永久堵塞 等待 每個執行緒都在等待被 其他執行緒占用並堵塞了的資源。例如,如果執行緒a鎖住了記錄1並等待記錄2,而執行緒b鎖住了記錄2並等待記錄1,這樣兩個執行緒就發生了死鎖現象。gdb除錯死鎖的方法 gdb attach pid 找到 lll lo...