我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Sql Server 2008 【存储过程】 死锁 查询和杀死

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Sql Server 2008 【存储过程】 死锁 查询和杀死

Sql Server 2008 【存储过程】 死锁 查询和杀死

1 . 使用数据库中,可能出现死锁, 导致程序 无法正常使用.

Create procedure [dbo].[sp_who_lock]
(
@bKillPID Bit=0 -- 0: 查询 1: 结束掉相对应的死锁ID (可能导致数据异常)
)
as
begin
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
if @@error<>0 return @@error
if @count=0
begin
select "没有阻塞和死锁信息"
return 0
end
Declare @SBak Varchar(10)
while @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)
If @bKillPID =1
Begin
Set @SBak=CAST(@blk AS VARCHAR(10))
exec("Kill "+@SBak)
Set @SBak=CAST(@spid AS VARCHAR(10))
exec("Kill "+@SBak)
End
end
set @index=@index+1
end
if @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语法如下"
dbcc inputbuffer(@spid)
dbcc inputbuffer(@blk)

set @index=@index+1
end
end
drop table #temp_who_lock
return 0
end
GO

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Sql Server 2008 【存储过程】 死锁 查询和杀死

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Sql Server 2008 【存储过程】 死锁 查询和杀死

1 . 使用数据库中,可能出现死锁, 导致程序 无法正常使用.Create procedure [dbo].[sp_who_lock] ( @bKillPID Bit=0 -- 0: 查询 1: 结束掉相对应的死锁ID (可能导致数据异常)) as
Sql Server 2008 【存储过程】 死锁 查询和杀死
2018-08-23

SQL Server根据表名查询存储过程或试图 - Hero

select a.name 来源名称,b.text 代码内容, case when a.xtype="V" then "视图" when a.xtype="P" then "存储过程" when a.xtype=
SQL Server根据表名查询存储过程或试图 - Hero
2016-05-05

编程热搜

目录