Following are the instructions for script.
1) Execute the above SQL statement on Master Database.
2) once this stored procedure is created, execute the SP against Master DB.
Exec SP_GetBlockedInfo
Following are the instructions for script.
1) Execute the above SQL statement on Master Database.
2) once this stored procedure is created, execute the SP against Master DB.
Exec SP_GetBlockedInfo
Create Proc SP_GetBlockedInfo
as
declare @spid int
declare @blocked int
declare @db_name varchar(500)
declare @program_name varchar(1000)
declare @loginame varchar(500)
declare @login_time datetime
declare @last_batch datetime
declare @str varchar(100)
declare @runtimeinmin int
declare @min int
set @min = 1
create table #bufferspid(eventtype varchar(200)
,parameters varchar(200)
,eventinfo varchar(7600))
create table #bufferblocked(eventtype varchar(200)
,parameters varchar(200)
,eventinfo varchar(7600))
create table #blocked(
row_id int identity (1,1)
,spid int
,sqlspid varchar(3000)
,blockedby int
,sqlblockedby varchar(3000)
,servername varchar(200)
,dbname varchar(200)
,programname varchar(200)
,loginame varchar(500)
,login_time datetime
,last_batch datetime
,runtimeinmin int)
IF Exists (select * from master..syscursors with (nolock) where cursor_name = 'cur_blocked_spid')
Begin
close cur_blocked_spid
deallocate cur_blocked_spid
End
declare cur_blocked_spid cursor
read_only
for select
spid
,blocked
,db_name(dbid)
,program_name
,loginame
,login_time
,last_batch
,datediff(mi,last_batch,getdate()) runtimeinmin
from
master.dbo.sysprocesses with (nolock)
where
blocked > 0
open cur_blocked_spid
fetch next from cur_blocked_spid into @spid,@blocked,@db_name,@program_name,@loginame,@login_time,@last_batch,@runtimeinmin
while (@@fetch_status <> -1)
begin
if (@@fetch_status <> -2)
begin
set @str = 'dbcc inputbuffer ('+convert(varchar,@spid)+')'
insert #bufferspid
exec (@str)
set @str = 'dbcc inputbuffer ('+convert(varchar,@blocked)+')'
insert #bufferblocked
exec (@str)
insert into #blocked (spid,sqlspid,blockedby,sqlblockedby,servername,dbname,programname,loginame,login_time,last_batch,runtimeinmin)
select
@spid as spid
,(select eventinfo from #bufferspid) as sqlspid
,@blocked as blockedby
,(select eventinfo from #bufferblocked) as sqlblockedby
,@@servername as servername
,@db_name as dbname
,@program_name as programname
,@loginame as loginame
,@login_time as login_time
,@last_batch as last_batch
,@runtimeinmin as runtimeinmin
truncate table #bufferspid
truncate table #bufferblocked
end
fetch next from cur_blocked_spid into @spid,@blocked,@db_name,@program_name,@loginame,@login_time,@last_batch,@runtimeinmin
end
close cur_blocked_spid
deallocate cur_blocked_spid
select
spid
,programname
,sqlspid
,blockedby
,sqlblockedby
,servername
,dbname,loginame
,login_time
,last_batch
,runtimeinmin
from #blocked
-- when testing with query analyzer open the following code.
DROP TABLE #BUFFERSPID
DROP TABLE #BUFFERBLOCKED
DROP TABLE #BLOCKED