`
baobeituping
  • 浏览: 1036152 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

编写的一个存储过程,来检测数据库死锁进程

SQL 
阅读更多

 /*--------------------------------------------------------------------------------------- 
 
名称:sp_who_lock 
功能:用来检测是否有死锁的进程,如果有,把造成死锁的进程ID,HostName, ProgramName 和执行的SQL 
      语句保存到表jobcn_boss_operlog.dbo.DeadLockLog 
 
参数: @SaveToTable 用来标示是否保存死锁进程到表jobcn_boss_operlog.dbo.DeadLockLog 
 1 是, 0 否, 默认 = 0 
 
     @PrintRootCauseOnly 是否只显示造成死锁的根源进程信息 
        1 只显示死锁根源进程 0 除显示死锁根源进程外,还显示被阻塞的进程, 默认 = 0  
 
时间:2010-10-11 
版本:1.0 
修改: 
 
---------------------------------------------------------------------------------------*/ 
 
CREATE  procedure dbo.sp_who_lock 
 @SaveToTable int = 0, 
 @PrintRootCauseOnly int = 1 
as 
begin 
 
set nocount on 
declare @spid int,@bl int, 
 @intTransactionCountOnEntry int, 
        @intRowcount int, 
        @intCountProperties int, 
        @intCounter int, 
 @HostName nchar(128), 
 @ProgramName nchar(128), 
 @SQLCmd as varchar(1000) 
  
create table #tmp_lock_who ( 
 id int identity(1,1), 
 spid smallint, 
 bl smallint) 
 
create table #tmpSQL (EventType varchar(100), 
 Parameters int, 
 EventInfo varchar(2000)) 
 
  
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 N'现在没有阻塞和死锁信息' as message 
-- 循环开始 
 
while @intCounter <= @intCountProperties 
begin 
 -- 取第一条记录 
 select @spid = spid,@bl = bl 
  from #tmp_lock_who where Id = @intCounter 
 begin 
  if @spid =0 
          print N'* 引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + N'进程号,其执行的SQL语法如下' 
  else 
   begin 
    if @PrintRootCauseOnly <> 1 
            print N'进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ N'被' + N'进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +N'阻塞,其当前进程执行的SQL语法如下' 
   end 
 
  --Get bolocker's host name and program name 
  select @HostName = hostname, @ProgramName = program_name  
   from sysprocesses  
   where SPID = @bl 
 
  truncate table #tmpSQL 
  select @SQLCmd = 'dbcc inputbuffer(' + cast(@bl as varchar(10)) + ') with no_infomsgs' 
  insert into  #tmpSQL exec(@SQLCmd) 
   
  select @SQLCmd = EventInfo from #tmpSQL 
 
  if @PrintRootCauseOnly <> 1 or @spid =0 
  begin 
   print @SQLCmd 
   print ' ' 
  end 
 
  if @SaveToTable = 1 and @spid =0   --写入引起数据库死锁的进程号到jobcn_boss_operlog.dbo.DeadLockLog 
   insert into jobcn_boss_operlog.dbo.DeadLockLog  
    (SPID,HostName,ProgramName,SQLExec,FindDate) values 
    (@bl,@HostName,@ProgramName,@SQLCmd,getdate()) 
 
   
   --DBCC INPUTBUFFER (@bl ) 
 end 
  
 -- 循环指针下移 
 set @intCounter = @intCounter + 1 
end 
  
  
drop table #tmp_lock_who 
drop table #tmpSQL 
 
set nocount off 
  
return 0 
 
end 
  
  
 

分享到:
评论

相关推荐

    SQL Server 2008编程入门经典(第3版)

    8.7 创建一个快速示例 8.7.1 创建数据库 8.7.2 添加数据库关系图和初始表 8.7.3 添加关系 8.7.4 添加一些约束 8.8 本章小结 8.9 练习 第9章 SQLServer存储和索引结构 9.1 SQLServer存储机制 9.1.1 数据库 9.1.2 ...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    8.7 创建一个快速示例 8.7.1 创建数据库 8.7.2 添加数据库关系图和初始表 8.7.3 添加关系 8.7.4 添加一些约束 8.8 本章小结 8.9 练习 第9章 SQLServer存储和索引结构 9.1 SQLServer存储机制 9.1.1 数据库 9.1.2 ...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    8.7 创建一个快速示例 8.7.1 创建数据库 8.7.2 添加数据库关系图和初始表 8.7.3 添加关系 8.7.4 添加一些约束 8.8 本章小结 8.9 练习 第9章 SQLServer存储和索引结构 9.1 SQLServer存储机制 9.1.1 数据库 9.1.2 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    完全根据考试要求来阐述每一个知识点 提供可供搜索的Ebook(英文版)和训练题 提供实际场景案例分析和故障诊断实验 SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    完全根据考试要求来阐述每一个知识点 提供可供搜索的Ebook(英文版)和训练题 提供实际场景案例分析和故障诊断实验 SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    完全根据考试要求来阐述每一个知识点 提供可供搜索的Ebook(英文版)和训练题 提供实际场景案例分析和故障诊断实验 SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构...

    java开源包1

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包11

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包2

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包3

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包6

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包5

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包10

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包4

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包8

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包7

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包9

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用...

    java开源包101

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

Global site tag (gtag.js) - Google Analytics