国产一级一区二区_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久久夜色精品国产_欧美色网一区二区
久久精品理论片| 欧美刺激午夜性久久久久久久| 性做久久久久久免费观看| 日韩av一区二区在线影视| 成人精品视频一区二区三区| 日韩欧美一级片| 亚洲视频一区二区在线| 极品少妇一区二区| 日韩一区二区三区精品视频| 亚洲一本大道在线| 91女厕偷拍女厕偷拍高清| 国产午夜精品一区二区三区四区| 日韩成人午夜电影| 欧美日韩黄色影视| 夜夜嗨av一区二区三区中文字幕| 91天堂素人约啪| 国产视频一区不卡| 精品无码三级在线观看视频| 91精品国产入口| 天堂va蜜桃一区二区三区漫画版| 欧美日韩一区在线| 亚洲国产aⅴ成人精品无吗| 91麻豆福利精品推荐| 亚洲免费三区一区二区| 欧美无人高清视频在线观看| 亚洲人成7777| www.亚洲激情.com| 亚洲美女淫视频| 高清av一区二区| 自拍偷自拍亚洲精品播放| 成人av在线资源网站| 国产三区在线成人av| 国产98色在线|日韩| 中文在线一区二区| 色综合色狠狠综合色| 亚洲国产美国国产综合一区二区| 欧美日韩精品系列| 久久不见久久见免费视频7| 26uuu久久综合| 高清beeg欧美| 五月天国产精品| 337p粉嫩大胆噜噜噜噜噜91av| 成人三级伦理片| 亚洲免费在线观看视频| 4438成人网| 国产麻豆视频一区二区| 国产精品少妇自拍| 制服丝袜成人动漫| 老司机精品视频导航| 日本一区二区三级电影在线观看| 成人av综合在线| 日韩精品视频网| 国产欧美日韩精品一区| 在线观看国产91| 老司机午夜精品99久久| 欧美激情一区三区| 日韩欧美一区二区免费| 成人中文字幕在线| 夜夜夜精品看看| 国产三级精品视频| 欧美日韩高清一区二区不卡| 不卡电影免费在线播放一区| 天堂成人免费av电影一区| 26uuu另类欧美| 色999日韩国产欧美一区二区| 极品少妇一区二区| 亚洲第一成人在线| 国产亲近乱来精品视频| 欧美一级日韩不卡播放免费| 97久久精品人人做人人爽50路| 麻豆成人久久精品二区三区小说| 一区免费观看视频| 国产日韩欧美一区二区三区综合| 欧美性大战久久久久久久蜜臀| gogogo免费视频观看亚洲一| 免费观看一级欧美片| 亚洲国产精品久久久久秋霞影院| 国产欧美精品国产国产专区| 制服丝袜亚洲播放| 精品视频999| 日本精品一区二区三区四区的功能| 国产老女人精品毛片久久| 亚洲第一成年网| 一区二区高清视频在线观看| 国产精品另类一区| 日本一区二区免费在线| 国产欧美视频一区二区三区| 久久精品一二三| 久久久久久久综合| 久久精品在这里| 国产欧美精品一区二区色综合| 久久色视频免费观看| 日韩三级.com| 亚洲精品一区二区三区四区高清| 亚洲午夜电影在线| 国产精品狼人久久影院观看方式| 国产精品午夜电影| ...xxx性欧美| 亚洲成人第一页| 日产国产高清一区二区三区| 奇米色777欧美一区二区| 久久精品国产77777蜜臀| 五月婷婷久久丁香| 久久国产日韩欧美精品| 国产一区二区久久| av动漫一区二区| 欧美在线一区二区三区| 欧洲一区二区三区在线| 日韩视频永久免费| 国产校园另类小说区| 亚洲国产精品久久久男人的天堂| 欧美在线观看一区| 亚洲国产日韩精品| jlzzjlzz亚洲日本少妇| 国产精品一级黄| 亚洲18色成人| 亚洲超碰精品一区二区| 日本不卡不码高清免费观看 | 欧美亚洲一区二区在线观看| 欧美性生活影院| 日韩亚洲欧美在线| 久久久99精品免费观看不卡| 亚洲精品乱码久久久久久日本蜜臀| 一区二区三区欧美久久| 蜜桃av一区二区三区| 国产91丝袜在线观看| 色噜噜久久综合| 精品久久久久av影院| 亚洲国产精品精华液ab| 日韩和欧美一区二区| 国产成人福利片| 欧美日本一区二区三区四区| 欧美激情综合在线| 丝瓜av网站精品一区二区| 国产一区二区三区在线看麻豆| 91视频一区二区三区| 日韩精品一区二区三区中文不卡 | 成人中文字幕在线| 色八戒一区二区三区| 国产亚洲精品资源在线26u| 亚洲国产精品久久久久婷婷884 | 国产精品中文欧美| 欧美高清激情brazzers| 国产精品久久久久久久久久久免费看 | 国产精品日日摸夜夜摸av| 石原莉奈在线亚洲二区| 91视频你懂的| 中文字幕一区二区在线观看| 九色综合狠狠综合久久| 欧美日韩免费观看一区三区| 国产精品久久久久久久久图文区 | 国产精品沙发午睡系列990531| 久久精品二区亚洲w码| 欧美视频一区二区在线观看| 中文字幕制服丝袜一区二区三区 | 午夜电影一区二区| 色先锋久久av资源部| 中文字幕高清不卡| 国模大尺度一区二区三区| 欧美肥妇free| 亚洲国产成人av网| 色www精品视频在线观看| 亚洲视频综合在线| 一本大道久久a久久精品综合| 亚洲欧洲一区二区在线播放| 成人午夜av电影| 国产精品久久久久久久久图文区| 风间由美一区二区三区在线观看 | 不卡视频在线观看| 自拍偷自拍亚洲精品播放| a级精品国产片在线观看| 国产精品人人做人人爽人人添| 国产成人免费在线视频| 欧美激情在线免费观看| 92国产精品观看| 亚洲一区在线播放| 欧美精品日日鲁夜夜添| 日韩精品午夜视频| 精品国产乱码久久久久久闺蜜| 国产乱子伦一区二区三区国色天香| 精品捆绑美女sm三区| 国产精品2024| 亚洲激情图片一区| 欧美一三区三区四区免费在线看| 免费成人在线影院| 26uuu精品一区二区三区四区在线| 国产成人亚洲精品青草天美| 国产精品入口麻豆九色| 91久久久免费一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品一线二线三线精华| 国产精品久久三区| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲国产精品自拍| 亚洲精品一区二区三区蜜桃下载 | 天天色综合成人网| 国产日韩欧美综合在线| 欧洲生活片亚洲生活在线观看| 免费在线观看不卡| 日韩一区在线看|