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