zoukankan      html  css  js  c++  java
  • Sql解锁 数据库死锁检测

    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   杀掉被锁进程
  • 相关阅读:
    Oracle基础 (十二)数学函数
    Oracle基础 (十一)字符串函数
    Oracle基础(十) DML数据操作
    Oracle 常用命令大全
    Oracle 常用的SQL语法和数据对象
    Server.MapPath()
    登陆sharepoint的主页,提示:文件存在(异常来自 HRESULT:0x80070050)
    如何查看电脑的开机时间
    SQL 2008登录的域账户与数据库服务器不再同一个域的 处理方法
    发布MVC项目到服务器上时候遇到的 模块 DirectoryListingModule 通知 ExecuteRequestHandler 处理程序 StaticFile 错误代码 0x00000000
  • 原文地址:https://www.cnblogs.com/Gxiaopan/p/4183869.html
Copyright © 2011-2022 走看看