USE [DataBaseName]
GO
/****** Object:  StoredProcedure [dbo].[sp_check_deadlock]    Script Date: 07/04/2014 13:49:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[sp_check_deadlock]
  as
set nocount on
  /*
  select
  spid As 被锁进程ID,
  blocked As 锁进程ID,
  status  As 被锁状态,
  SUBSTRING(SUSER_SNAME(sid),1,30) 被锁进程登陆帐号,
  SUBSTRING(hostname,1,12) As 被锁进程用户机器名称,
  SUBSTRING(DB_NAME(dbid),1,10) As 被锁进程数据名称,
  cmd 被锁进程命令,
  waittype 被锁进程等待类型
  FROM master..sysprocesses
  WHERE blocked>0
  
  --dbcc inputbuffer(66) 输出相关锁进程的语句
  -- kill 24   杀掉被锁进程
   */
  
  --创建锁进程临时表
  CREATE TABLE #templocktracestatus ( 
          EventType varchar(max), 
          Parameters INT, 
          EventInfo varchar(max) 
          )
  --创建被锁进程临时表
  CREATE TABLE #tempbelocktracestatus ( 
          EventType varchar(max), 
          Parameters INT,
          EventInfo varchar(max) 
          )
--创建之间的关联表
CREATE TABLE #locktracestatus ( 
        belockspid INT, 
        belockspidremark varchar(max), 
        belockEventType varchar(max), 
        belockEventInfo varchar(max), 
        lockspid INT, 
        lockspidremark varchar(max), 
        lockEventType varchar(max), 
        lockEventInfo varchar(max) 
        )
  
  --获取死锁进程
  DECLARE dbcc_inputbuffer CURSOR READ_ONLY
 FOR select spid 被锁进程ID,blocked 锁进程ID  FROM master..sysprocesses   WHERE blocked>0
  
  DECLARE @lockedspid int
  DECLARE @belockedspid int
  
  OPEN dbcc_inputbuffer
  
  FETCH NEXT FROM dbcc_inputbuffer INTO  @belockedspid,@lockedspid    WHILE (@@fetch_status <> -1)
  BEGIN
 
  IF (@@fetch_status <> -2)
  BEGIN
--print '被堵塞进程' 
--select @belockedspid 
--dbcc inputbuffer(@belockedspid) 
--print '堵塞进程' 
--select @lockedspid 
--dbcc inputbuffer(@lockedspid)
   INSERT INTO #tempbelocktracestatus 
   EXEC('DBCC INPUTBUFFER('+@belockedspid+')')
 
   INSERT INTO #templocktracestatus  
   EXEC('DBCC INPUTBUFFER('+@lockedspid+')')
 
   INSERT INTO #locktracestatus 
   select @belockedspid,'被锁进程',a.EventType,a.EventInfo,@lockedspid,'锁进程',b.EventType,b.EventInfo
     from #tempbelocktracestatus  a,#templocktracestatus b
  END
 
  FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid
  END
  
  CLOSE dbcc_inputbuffer
  DEALLOCATE dbcc_inputbuffer
  select * from #locktracestatus
  
  return (0) -- sp_check_deadlock
  -- sp_who
  -- kill 24   杀掉被锁进程

Sql解锁 数据库死锁检测的更多相关文章

  1. 解决SQL server2005数据库死锁的经验心得

    前段时间提到的"sql server 2005 死锁解决探索",死锁严重,平均每天会发生一次死锁,在解决和处理SQL server2005死锁中查了很多资料和想了很多办法,后来我们 ...

  2. 快速定位MS Sql Server 数据库死锁进程

    最近在做一个大型项目,由于数据设计采用离散型数据库设计,以方便需求变更及用户自定义流程要素,因为要素用户自定义,数据完整性靠代码约束变得不太现实,只能依靠表间关系来约束,结果因此导致数据的操作经常产生 ...

  3. [Bug] 解决 Sql Server 数据库死锁问题

    SELECT request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tra ...

  4. SQL Server 数据库中关于死锁的分析

    SQL Server数据库发生死锁时不会像Oracle那样自动生成一个跟踪文件.有时可以在[管理]->[当前活动] 里看到阻塞信息(有时SQL Server企业管理器会因为锁太多而没有响应). ...

  5. 转载 50种方法优化SQL Server数据库查询

    原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...

  6. SqlServer定时备份数据库和定时杀死数据库死锁解决

    上周五组长对我说了一句要杀死数据库的死锁进程,有时候同一时刻不停写入数据库会造成这种情况的发生,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定 ...

  7. MS Sql Server 数据库或表修复(DBCC CHECKDB)

    MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令.  1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL ...

  8. 面试官:请用SQL模拟一个死锁

    文章首发于公众号:BiggerBoy 有读者说面试被问到怎么用SQL模拟数据库死锁? 这位读者表示对Java中的死锁还是略知一二的,但是突然用SQL写死锁的案例之前还真没遇到过,这个问题没答上来.所以 ...

  9. 当前数据库普遍使用wait-for graph等待图来进行死锁检测

    当前数据库普遍使用wait-for graph等待图来进行死锁检测 较超时机制,这是一种更主动的死锁检测方式,innodb引擎也采用wait-for graph SQL Server也使用wait-f ...

随机推荐

  1. Master Nginx(1) - Installing Nginx and Third-Party Modules

    Installing NGINX and Third-Party Modules Installing Nginx using a package manager Linux(deb-based) s ...

  2. How to Create a SharePoint 2010 Project Without SharePoint Server

    转:http://community.bamboosolutions.com/blogs/sharepoint-2010/archive/2012/06/21/create-a-sharepoint- ...

  3. (转载)1248 - Every derived table must have its own alias

    (转载)http://hi.baidu.com/lylegend13/item/a79f17eb51f5dff7e0a5d43b 1. select count(distinct CName) fro ...

  4. No setter found for property 'userDAO' in class 'com.ssh.service.impl.User1Service'

    造成此问题的原因是: 在applicationContext.xml中引用 <bean id="userService" class="com.ssh.servic ...

  5. HDU-1335 Basically Speaking

    http://acm.hdu.edu.cn/showproblem.php?pid=1335 Basically Speaking Time Limit: 2000/1000 MS (Java/Oth ...

  6. asp.net 服务器端缓存与客户端缓存 [转]

    介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管 理,有的提到的cache管理,这里我比较喜欢ca ...

  7. jQuery获取和设置disabled属性、背景图片路径

    之前对于这个独特的disabled属性获取和设置很混乱,今天项目中用到了,用attr不能实现,于是多次试验得出: 获取disabled属性用prop $("#basic_key") ...

  8. malloc的实现

    在做csapp的malloc实验,一开始是按照书上的隐式链表法,发现得分很低.这种方法确实很挫,需要遍历一遍以找到合适的空闲块.于是我想到<STL源码剖析>中stl的内存池,感觉应该可以用 ...

  9. 交叉编译中的 --sysroot 等等在编译时的作用

    --sysroot=dir 的作用 如果在编译时指定了-sysroot=dir 就是为编译时指定了逻辑目录.编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前 ...

  10. 在Jersey中如何处理泛型集合

    Jersey是一个标准的Restful Web service框架,可以方便的实现Restful的Server端和客户端. 本文主要介绍使用Jersey客户端时如何将Json格式的数组转换成java的 ...