SQL SERVER 檢視程序衝突

2021-07-11 23:55:07 字數 2426 閱讀 3937

warn:2016-05-23 12:57:17,307 - sql error: 1205, sqlstate: 40001

error:2016-05-23 12:57:17,307 - 事務(程序 id 53)與另乙個程序被死鎖在 鎖 資源上,並且已被選作死鎖犧牲品。請重新執行該事務。

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

--select @count,@index

--if @@error<>0 return @@error    

if @count = 0

begin

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

--return 0    

endwhile @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)

endset @index=@index + 1

endif @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語法如下'

print ( ltrim(@spid) + ''+ ltrim(@blk));

if(@spid <> 0)

begin

dbcc inputbuffer(@spid)   --

enddbcc inputbuffer(@blk)   --引起阻塞語句

set @index=@index + 1

endend

drop table #temp_who_lock

--return 0    

--kill 54

SqlServer 檢視死鎖的程序

這個工具,用來檢視一些當時的執行狀態.和乾掉程序.但是這個工具只能檢視部分哪個表被鎖住了.也無法知道是哪個程序和sql導致了鎖程序.只能檢視一些其它的資訊.至於如何檢視死鎖的表,需要用到下面的sql.然後根據查出來的 程序id 去上面的工具中 檢視詳細資訊.可以檢視到引起死鎖的sql 檢視被鎖表 s...

SqlServer 檢視死鎖的程序

這個工具,用來檢視一些當時的執行狀態.和乾掉程序.但是這個工具只能檢視部分哪個表被鎖住了.也無法知道是哪個程序和sql導致了鎖程序.只能檢視一些其它的資訊.至於如何檢視死鎖的表,需要用到下面的sql.然後根據查出來的 程序id 去上面的工具中 檢視詳細資訊.可以檢視到引起死鎖的sql 檢視被鎖表 s...

檢視SQL Server 版本

如何檢視sql server的版本 方法一 在查詢分析器中輸入 select version 並執行,檢視執行結果,對照便知版本。8.00.194 sql server 2000 rtm 8.00.384 sp1 8.00.534 sp2 8.00.760 sp3 8.00.2039 sp4 方法二...