sql server 创建存储过程 查看死锁 死锁处理

创建查看死锁的存储过程

use master  
go  
create procedure sp_who_lock  
as  
begin  
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 sysprocesses where  blocked>0 ) a   
   where not exists(select * from (select * from sysprocesses where  blocked>0 ) b   
   where a.blocked=spid)  
   union select spid,blocked from 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 '现在没有阻塞和死锁信息' as message  
  
-- 循环开始   
while @intCounter <= @intCountProperties  
begin  
-- 取第一条记录  
  select  @spid = spid,@bl = bl  
  from #tmp_lock_who where Id = @intCounter   
 begin  
  if @spid =0   
      select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'  
  else  
      select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'  
 DBCC INPUTBUFFER (@bl )  
 end  
  
-- 循环指针下移   
 set @intCounter = @intCounter + 1  
end  
  
drop table #tmp_lock_who  
  
return 0  
end  

创建删除指定数据库的死锁的存储过程

1. use master  
2. go  
3.   
4. if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[p_killspid]) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1)  
5. drop procedure [dbo].[p_killspid]  
6. GO  
7.   
8. create proc p_killspid  
9. @dbname varchar(200)    --要关闭进程的数据库名  
10. as    
11.     declare @sql  nvarchar(500)    
12.     declare @spid nvarchar(20)  
13.   
14.     declare #tb cursor for  
15.         select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)  
16.     open #tb  
17.     fetch next from #tb into @spid  
18.     while @@fetch_status=0  
19.     begin    
20.         exec(kill[email protected])  
21.         fetch next from #tb into @spid  
22.     end    
23.     close #tb  
24.     deallocate #tb  
25. go 

查看死锁

exec master..sp_who_lock

删除死锁

exec master..p_killspid dbname'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值