国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

如何終止SQL Server中的用戶進程
2008-09-12   IT專家網

  在很多情況下,往往會要求數據庫管理員終止SQL Server中的用戶進程,例如在停止某個數據庫的運作時,或者還原數據庫之前,或者長時間運行活動事務等情況下。數據庫管理員通常會使用SQL Server中提供的“KILL”命令來完成任務。

  但是,SQL Server提供的“KILL”命令靈活性不夠,不能在一次性結束多個會話,一次只能解決掉一個會話。本文將為大家介紹如何創建一個簡單的存儲過程來實現同時終止多個會話、結束連續的會話和結束連接到數據庫的所有會話等功能。

  首先,我們在主數據庫中創建“KILL2”這個進程,代碼如下所示(參考圖一)  

      USE [master]
  GO
  IF EXISTS (SELECT * FROM master.dbo.sysobjects
  WHERE id = OBJECT_ID(N'[kill2]') AND type in (N'P', N'PC'))
  DROP PROCEDURE [dbo].[kill2]
  GO
  --Usage1: Kill2 '51-57' --> Kills all the session IDs from 51 to 57
  --Usage2: Kill2 '58' --> Kills the session IDs 58
  --Usage3: Kill2 '51,56,100,58'
  --> Kills the session IDs 51,56,100 and 58
  --Usage4: Kill2 'DB=MyDatabase'
  --> Kills all the session IDs that are connected
  to the database "MyDatabase"
  use master
  go
  set concat_null_yields_null off
  go
  create procedure kill2 @param2 varchar(500)
  as
  --declare @param2 varchar(500)
  declare @param varchar(500)
  declare @startcount int
  declare @killcmd varchar(100)
  declare @endcount int
  declare @spid int
  declare @spid2 int
  declare @tempvar varchar(100)
  declare @tempvar2 varchar(100)
  --set @param2 ='54'
  set @param=REPLACE(@param2,' ','')
  if CHARINDEX('-',@param) <> 0
  begin
  select @startcount= convert(int,SUBSTRING(@param,1,charindex('-',@param)-1))
  select @endcount=convert(int,SUBSTRING(@param,charindex('-',@param)+1,(LEN(@param)-charindex('-',@param))))
  print 'Killing all SPIDs from ' + convert(varchar(100),@startcount)+' to ' +convert(varchar(100),@endcount)
  while @startcount <=@endcount
  begin
  set @spid=(select spid from master.dbo.sysprocesses where spid=@startcount and spid>50)
  if @spid = @startcount  

      begin
  print 'Killing '+convert(varchar(100),@startcount)
  set @killcmd ='Kill '+convert(varchar(100),@startcount)
  exec(@killcmd)
  end
      else 
  begin 
  Print 'Cannot kill the SPID ' +convert(varchar(100),@startcount) + ' because it does not Exist' 
  end 
  set @startcount=@startcount + 1 
  end 
  end 
  if CHARINDEX(',',@param) <> 0 
  begin 
  set @tempvar =@param 
  while charindex(',',@tempvar ) <> 0 
  begin 
  SET @tempvar2=left(@tempvar,charindex(',',@tempvar)-1) 
  set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@tempvar2) and spid>50) 
  if @spid = CONVERT(varchar(100),@tempvar2) 
  begin 
  print 'Killing '+CONVERT(varchar(100),@tempvar2) 
  set @killcmd='Kill '+CONVERT(varchar(100),@tempvar2) 
  exec (@killcmd) 
  end 
  else 
  begin 
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@tempvar2) + ' because it does not Exist' 
  end 
  set @tempvar =REPLACE(@tempvar,left(@tempvar,charindex(',',@tempvar)),'') 
  end 
  set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@tempvar) and spid>50) 
  if @spid = CONVERT(varchar(100),@tempvar) 
  begin 
  print 'Killing '+CONVERT(varchar(100),@tempvar) 
  set @killcmd='Kill '+CONVERT(varchar(100),@tempvar) 
  exec (@killcmd) 
  end 
  else 
  begin 
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@tempvar) + ' because it does not Exist' 
  end 
  end 
  if CHARINDEX('=',@param2) <>0 
  begin 
  print 'Killing all the SPIDs that are connected to the database '+RIGHT(@param2,(len(@param2)-3)) 
  declare dbcursor 
  cursor forward_only for select SPID from master.dbo.sysprocesses where DB_NAME(dbid) = RIGHT(@param2,(len(@param2)-3)) 
  open dbcursor 
  fetch dbcursor into @spid 
  while @@FETCH_STATUS =0 
  begin 
  set @spid2=(select spid from master.dbo.sysprocesses where spid=@spid and spid>50) 
  if @spid = @spid2 begin 
  print 'Killing '+CONVERT(varchar(100),@spid2) 
  set @killcmd='Kill '+CONVERT(varchar(100),@spid2) 
  exec (@killcmd) 
  end   

      else  
  begin  
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@spid2) + ' because it does not Exist'  
  end  
  fetch dbcursor into @spid  
  end  
  close dbcursor  
  deallocate dbcursor  
  end  
  if CHARINDEX('-',@param)=0 and CHARINDEX(',',@param) = 0 and CHARINDEX('=',@param)=0  
  begin  
  set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@param) and spid>50)  
  if @spid = CONVERT(varchar(100),@param)  
  begin  
  print 'Killing '+CONVERT(varchar(100),@param)  
  set @killcmd='Kill '+CONVERT(varchar(100),@param)  
  exec (@killcmd)  
  end  
  else  
  begin  
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@param) + ' because it does not Exist'  
  end  
  end  
  go  
  --kill2 '51'  
  --go  
  --kill2 '51-56'  
  --go  
  --kill2 '56,57,58,52'  
  --go  
  --kill2 'db=AdventureWorks2008'  
  --kill2 'db=My Database'  
  --go  
  --sp_who

圖一

         圖一

  用法一

  現在,我們假設進程ID(SPID)為51、52、53、54、55、57這幾個進程(見圖二)連接到了SQL Server數據庫,而我們只想把進程ID為54、55和57的進程結束掉。

圖二

  圖二

  執行以下命令。注意,在這個例子當中還在命令中加入了其他幾個SQL Server中不存在的SPID:61和100。 

      use master
  go
  kill2 '54,57,55,61,100'
  go

  運行結果:  

      Killing 54
  Killing 57
  Msg 6104, Level 16, State 1, Line 1
  Cannot use KILL to kill your own process.
  Cannot kill the SPID 55 because it does not Exist
  Cannot kill the SPID 61 because it does not Exist
  Cannot kill the SPID 100 because it does not Exist
#p#副標題#e#

圖三

                        圖三

  我們可以從結果(見圖三)看到,執行指令后成功終止了SPID 54。當試圖終止57時失敗了。同時結果也顯示了為什么沒能終止特定SPID的信息。

  用法二

  下面,假設我們有51、52、53、54、55、57、58、59和60這幾個SPID,而我們的目標是結束SPID從25到70的進程。

  執行以下命令:  

      use master
  go
  kill2 '25-75'
  go

  運行結果: 

      Killing all SPIDs from 25 to 75
  Cannot kill the SPID 25 because it does not Exist
  …..
  Cannot kill the SPID 48 because it does not Exist
  Cannot kill the SPID 49 because it does not Exist
  Cannot kill the SPID 50 because it does not Exist
  Killing 51
  Killing 52
  Killing 53
  Killing 54
  Killing 55
  Cannot kill the SPID 56 because it does not Exist
  Killing 57
  Msg 6104, Level 16, State 1, Line 1
  Cannot use KILL to kill your own process.
  Killing 58
  Killing 59
  Killing 60
  Cannot kill the SPID 61 because it does not Exist
  .....
  Cannot kill the SPID 75 because it does not Exist

圖四

                                 圖四             

  從結果(見圖四)我們可以看到“KILL2”存儲過程忽略了所有SPID小于50的連接,而結束了從51到70的所有進程。

  用法三

  接下來,假設我們要終結掉所有連接到數據庫AdventureWorks2008的會話,同時又假設SPID為53、54、58和60的進程連接到了該數據庫(見圖五)。

圖五

  圖五

  現在,我們執行以下的T-SQL語句結束掉所有這些會話。 

      Use master
  go
  kill2 'db=AdventureWorks2008'
  go

  運行結果:

    Killing all the SPIDs that are connected to the database AdventureWorks2008
  Killing 53
  Killing 54
  Killing 58
  Killing 60

圖六

                                圖六      

  從結果(見圖六)我們可以看到“KILL2”存儲過程終止了所有連接到AdventureWorks2008數據庫的會話。

  用法四

  “KILL2”存儲過程的第四種用法類似于“KILL命令,也就是一次解決一個會話,如下所示: 

      Use master
  go
  kill2 '56'
  go

熱詞搜索:

上一篇:局域網提高網速的二十一個小技巧
下一篇:SQL Server 2005中如何使用分析服務執行DDL任務

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
亚洲愉拍自拍另类高清精品| 亚洲一区二区三区中文字幕| 国产一区二区精品| 亚洲伊人色欲综合网| 国产一区二区三区久久 | 亚洲一区二区三区视频播放| 一本色道88久久加勒比精品| 一二三区精品| 亚洲欧美中文日韩在线| 午夜精品久久久久| 久久免费高清视频| 亚洲国产欧美日韩| 午夜精品在线看| 亚洲美女在线国产| 另类图片国产| 亚洲激情网站免费观看| 亚洲欧美日韩国产另类专区| 欧美视频在线观看一区| 国语自产精品视频在线看一大j8| 久久精品在这里| 久久精品视频免费| 亚洲国产精选| 欧美亚洲视频一区二区| 免费欧美在线| 国产精品极品美女粉嫩高清在线| 亚洲国产高清一区二区三区| 亚洲一区二区免费在线| 老司机免费视频久久| 国产精品日日摸夜夜添夜夜av| 欧美精品国产精品日韩精品| 国产精品人人爽人人做我的可爱| 国产精品美腿一区在线看| 经典三级久久| 亚洲一区欧美二区| 久久亚洲影院| 国产三区精品| 一区二区三区福利| 美日韩精品视频免费看| 国产日韩欧美综合| 亚洲午夜av| 久久久久久亚洲精品中文字幕 | 亚洲免费久久| 国产欧美一区二区精品性| 另类尿喷潮videofree| 亚洲电影一级黄| 国产麻豆视频精品| 亚洲黄色av| 久久精品最新地址| 国产精品美女久久久久久免费| 亚洲电影在线看| 欧美中在线观看| 国产精品xxxav免费视频| 亚洲肉体裸体xxxx137| 欧美伊久线香蕉线新在线| 欧美色一级片| 夜夜嗨av一区二区三区四区| 欧美日韩午夜| 亚洲日本一区二区| 美女成人午夜| 亚洲精品视频啊美女在线直播| 久久国产色av| 国产一区二区三区免费观看| 麻豆91精品| 在线欧美日韩国产| 久久久久久久久久久久久女国产乱| 国产偷久久久精品专区| 欧美亚洲一区在线| 国产日韩欧美另类| 亚洲乱码一区二区| 欧美福利专区| 亚洲伦理久久| 欧美母乳在线| 亚洲日韩欧美视频一区| 久久久免费精品视频| 国产精品亚洲一区二区三区在线| 亚洲天堂免费观看| 国产精品劲爆视频| 亚洲免费视频观看| 国产视频综合在线| 亚洲欧美成人一区二区在线电影| 国产精品日产欧美久久久久| 午夜欧美大尺度福利影院在线看| 国产情侣久久| 久久精品在这里| 伊人精品在线| 欧美高清自拍一区| 99精品国产在热久久婷婷| 免费看av成人| 一本色道久久综合亚洲精品不卡 | 在线看视频不卡| 六月婷婷一区| 一区二区三区欧美视频| 欧美激情综合亚洲一二区| 日韩视频免费观看| 欧美日韩一区二| 欧美国产亚洲视频| 欧美日韩在线一二三| 在线观看国产成人av片| 毛片av中文字幕一区二区| 亚洲成人原创 | 日韩亚洲欧美高清| 国产精品日韩在线| 欧美激情区在线播放| 欧美中文字幕视频在线观看| 日韩视频免费看| 揄拍成人国产精品视频| 国产精品一级| 欧美色精品在线视频| 免费影视亚洲| 久久久国产午夜精品| 亚洲欧美日韩精品久久久久| 日韩午夜三级在线| 亚洲国产裸拍裸体视频在线观看乱了| 国产日韩欧美高清免费| 国产精品成人va在线观看| 欧美激情二区三区| 欧美 日韩 国产在线 | 国产午夜精品视频| 欧美日韩视频在线一区二区观看视频| 老司机凹凸av亚洲导航| 久久成人羞羞网站| 性欧美videos另类喷潮| 亚洲自拍电影| 亚洲一区二区三区777| 一区二区三区视频在线播放| 亚洲毛片一区二区| 亚洲精品四区| 亚洲免费成人| 亚洲作爱视频| 99视频超级精品| 日韩香蕉视频| 99视频在线观看一区三区| 亚洲精品少妇30p| 亚洲精品日韩在线观看| 亚洲精品乱码久久久久久蜜桃91| 亚洲国产高清aⅴ视频| 亚洲国产成人一区| 91久久久亚洲精品| 日韩视频一区二区三区| a4yy欧美一区二区三区| 一本大道久久精品懂色aⅴ| 一二三区精品| 亚洲视频免费看| 亚洲一区二区三区影院| 亚洲影院污污.| 欧美一级播放| 久久久亚洲精品一区二区三区| 久久天天狠狠| 欧美电影在线观看完整版| 欧美精品一区二区蜜臀亚洲| 欧美极品aⅴ影院| 国产精品theporn88| 国产女优一区| 在线观看亚洲a| 亚洲精品五月天| 亚洲午夜国产成人av电影男同| 午夜精品久久久久久久99樱桃| 久久超碰97中文字幕| 免费观看成人| 欧美午夜片在线免费观看| 国产精品久久久久久久app| 国产欧美一区二区精品性| 国一区二区在线观看| 狠狠综合久久| 亚洲高清在线| 在线精品视频一区二区三四| 亚洲另类春色国产| 性刺激综合网| 老司机精品久久| 欧美日韩裸体免费视频| 国产精品捆绑调教| 黑人一区二区三区四区五区| 91久久精品一区二区别| 亚洲欧美国产另类| 欧美在线免费视屏| 欧美日本韩国| 狠狠色噜噜狠狠色综合久| 亚洲欧洲日本专区| 国产精品99久久久久久久女警| 性8sex亚洲区入口| 久久综合久色欧美综合狠狠| 欧美日韩你懂的| 国产亚洲午夜高清国产拍精品| 国产日本欧洲亚洲| 亚洲国产一区二区三区a毛片| 亚洲视频一区二区| 久久久久久综合网天天| 欧美色123| 国产欧美精品久久| 亚洲大胆女人| 亚洲欧美视频| 女人天堂亚洲aⅴ在线观看| 国产精品久久久久久久久动漫| 伊人狠狠色j香婷婷综合| 亚洲日本欧美天堂| 午夜精品在线看| 欧美日韩在线观看视频| 国产欧美日韩精品丝袜高跟鞋 | 国产日韩欧美亚洲| 99国产精品|