SQL 查看死結情況的預存程序

來源:互聯網
上載者:User

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_who_lock]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)    
  2.   drop procedure [dbo].[sp_who_lock]    
  3.   GO    
  4.   /***************************************************************************    
  5.   // 建立 :    
  6.   // 日期 :  
  7.   // 修改 :     
  8.   // 說明 : 查看資料庫裡阻塞和死結情況    
  9.   ***************************************************************************/    
  10.   use master    
  11.   go    
  12.   create procedure sp_who_lock    
  13.   as    
  14.   begin    
  15.   declare @spid int,@bl int,    
  16.   @intTransactionCountOnEntry int,    
  17.   @intRowcount int,    
  18.   @intCountProperties int,    
  19.   @intCounter int    
  20.      
  21.   create table #tmp_lock_who (    
  22.   id int identity(1,1),    
  23.   spid smallint,    
  24.   bl smallint)    
  25.      
  26.   IF @@ERROR<>0 RETURN @@ERROR    
  27.      
  28.   insert into #tmp_lock_who(spid,bl) select 0 ,blocked    
  29.   from (select * from sysprocesses where blocked>0 ) a    
  30.   where not exists(select * from (select * from sysprocesses where blocked>0 ) b    
  31.   where a.blocked=spid)    
  32.   union select spid,blocked from sysprocesses where blocked>0    
  33.      
  34.   IF @@ERROR<>0 RETURN @@ERROR    
  35.      
  36.   -- 找到暫存資料表的記錄數     
  37.   select @intCountProperties = Count(*),@intCounter = 1    
  38.   from #tmp_lock_who    
  39.      
  40.   IF @@ERROR<>0 RETURN @@ERROR    
  41.      
  42.   if @intCountProperties=0    
  43.   select '現在沒有阻塞和死結資訊' as message    
  44.      
  45.   -- 迴圈開始     
  46.   while @intCounter <= @intCountProperties    
  47.   begin    
  48.   -- 取第一條記錄     
  49.   select @spid = spid,@bl = bl    
  50.   from #tmp_lock_who where Id = @intCounter    
  51.   begin    
  52.   if @spid =0    
  53.   select '引起資料庫死結的是: '+ CAST(@bl AS VARCHAR(10)) + '進程號,其執行的SQL文法如下'    
  54.   else    
  55.   select '進程號SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '進程號SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其當前進程執行的SQL文法如下'    
  56.   DBCC INPUTBUFFER (@bl )    
  57.   end    
  58.      
  59.   -- 迴圈指標下移     
  60.   set @intCounter = @intCounter + 1    
  61.   end    
  62.      
  63.      
  64.   drop table #tmp_lock_who    
  65.      
  66.   return 0    
  67.   end     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.