USE [XX库]
GO
/****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 01/01/2014 14:52:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[sp_who_lock]
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
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)
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
分享到:
相关推荐
标题与描述均指出本篇讨论的主题是“查询SQL Server数据库死锁存储过程”。这表明文章旨在介绍一个用于检测SQL Server环境中发生的死锁现象的自定义存储过程。 #### 标签解读 标签“SQL死锁”进一步强调了本文将...
HIS系统SQL Server数据库死锁问题的分析与解决 SQL Server数据库是HIS系统中非常重要的一部分,负责存储和管理大量的医疗数据。然而,在实际应用中,SQL Server数据库可能会出现死锁问题,导致系统性能下降, thậm...
《SQLServer2016数据库管理与开发项目教程(微课版)》是一份全面介绍SQL Server 2016数据库管理系统的学习资源,主要针对数据库管理和开发人员进行深入讲解。这个压缩包包含了丰富的实训课件,旨在帮助学习者通过...
1. 使用Create proc p_lockinfo命令来创建一个存储过程,以便快速查询死锁的进程信息。 2. 使用@kill_lock_spid bit=1命令来杀掉死锁的进程。 3. 使用@show_spid_if_no_lock bit=1命令来显示死锁的进程信息。 4. ...
在SQL Server数据库管理中,死锁是一个常见的问题,它发生在两个或多个事务相互等待对方释放资源,从而导致所有事务都无法继续执行的情况。SQL Server提供了多种工具和方法来检测和分析死锁,以便管理员能够及时发现...
在IT领域,尤其是在数据库管理与优化中,理解并解决SQL Server数据库中的死锁问题是一项至关重要的技能。死锁,作为并发事务处理中的一个常见问题,指的是两个或更多的事务在执行过程中,因争夺相同的资源而造成的...
### SQL Server死锁查询知识点详解 #### 一、SQL Server中的死锁概念 在SQL Server中,当两个或多个事务互相等待对方释放资源时就会发生死锁。这通常发生在两个或更多的事务请求锁定同一资源的不同部分(如行、页...
《SQLServer2016数据库原理及应用》是一门深入探讨SQL Server 2016这一强大数据库管理系统的基础与高级特性的课程。本课程重点在于理解数据库的基本概念、设计原则以及在实际工作中的应用,同时涵盖了SQL Server ...
SQL Server 2000是微软公司推出的一款关系型数据库管理系统,主要用于存储、管理和检索数据。它是Microsoft SQL Server系列中的一个重要版本,在企业和组织中被广泛应用于各种业务场景中。SQL Server 2000不仅提供了...
一个经典的获取SQLSERVEr数据库死锁及引起锁定的进程的存储过程。执行时,必须具有数据库超级管理员权限。
通过上述存储过程,我们不仅可以检测 SQL Server 中的死锁情况,还可以根据实际情况选择是否自动终止导致死锁的事务。这对于及时发现并解决问题具有重要的意义。当然,在实际应用中还需要结合具体情况,综合考虑各种...
在IT领域,数据库是至关重要的组成部分,而SQL Server 2000作为一款经典的关系型数据库管理系统,由Microsoft公司推出,被广泛应用于企业级数据存储和管理。本教程"SQL Server 2000数据库开发从零开始"旨在帮助初学...
使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道...
SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它在企业级数据存储、管理和分析方面具有广泛的应用。本书深入浅出地讲解了SQL Server 2000的核心概念、功能和操作技巧,适合初学者和有一定基础的学习者...
在提供的代码中,我们看到一个名为`sp_who_lock`的存储过程,用于检测SQL Server中的死锁情况。下面是该存储过程的分析: 1. **变量声明**: - `@spid INT`:存储进程ID。 - `@bl INT`:存储被阻塞的进程ID。 - ...
在SQL Server数据库管理系统中,死锁是常见的并发问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决...
SQL Server 2000是微软公司推出的一款关系型数据库管理系统(RDBMS),在21世纪初广泛应用于企业和组织的数据存储和管理。 教程内容可能涵盖以下几个核心知识点: 1. **SQL Server 2000简介**:介绍SQL Server ...
SQL Server示例数据库是Microsoft SQL Server提供的一组预先构建的数据库,用于演示、学习和测试SQL Server的功能。这些数据库包含了各种复杂的数据结构和业务场景,让开发者和DBA能够更好地理解如何在实际环境中...