国产一级一区二区_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| 久久乐国产精品| 国内精品写真在线观看| 性色一区二区| 一区在线播放视频| 欧美经典一区二区| 中日韩视频在线观看| 国产亚洲福利一区| 欧美.www| 亚洲欧美在线观看| 在线不卡欧美| 欧美午夜电影网| 免费一级欧美片在线播放| 亚洲网在线观看| 日韩视频永久免费| 亚洲激情啪啪| 亚洲国产va精品久久久不卡综合| 欧美另类专区| 麻豆成人综合网| 欧美在线中文字幕| 国语自产精品视频在线看8查询8| 欧美日韩不卡视频| 欧美成人dvd在线视频| 久久亚洲一区二区三区四区| 欧美一区二区三区日韩视频| 亚洲在线免费视频| 亚洲欧洲99久久| 欧美一区二区成人6969| 亚洲欧美日韩在线观看a三区 | 伊人久久大香线| 在线观看日韩| 欧美伊人精品成人久久综合97| 欧美一乱一性一交一视频| 欧美韩国日本综合| 国产综合欧美| 亚洲欧美日韩国产成人| 在线观看亚洲视频| 蜜臀av在线播放一区二区三区| 国产精品亚洲综合一区在线观看| 久久国产欧美日韩精品| 国产麻豆综合| 韩日精品视频一区| 亚洲视频高清| 在线日韩精品视频| 欧美日韩免费视频| 久久久久一区二区| 久久精品五月| 中文欧美字幕免费| 国产欧美91| 国产欧美精品在线播放| 国产欧美va欧美不卡在线| 国产精品欧美久久| 影视先锋久久| 亚洲午夜免费视频| 美国十次了思思久久精品导航| 夜夜嗨一区二区| 亚洲欧洲精品一区二区三区不卡 | 欧美国产视频一区二区| 久久久亚洲国产美女国产盗摄| 欧美一区二区三区在线播放| 日韩视频国产视频| 一本色道久久88综合亚洲精品ⅰ | 国产午夜精品美女视频明星a级| 欧美色欧美亚洲另类二区| 国产亚洲欧美在线| 亚洲天堂男人| 欧美精品一区二区精品网 | 国产夜色精品一区二区av| 99精品欧美一区二区三区综合在线| 亚洲淫性视频| 欧美色道久久88综合亚洲精品| 狠狠色综合网| 久久综合五月| 亚洲国产精品一区二区尤物区| 久久国产福利| 欧美日本一区二区视频在线观看| 欧美日韩视频| 亚洲国产va精品久久久不卡综合| 中文av字幕一区| 欧美日韩成人在线播放| 亚洲国产日韩欧美| 欧美涩涩视频| 欧美高清在线精品一区| 欧美在线视频一区二区| 欧美日韩另类丝袜其他| 国产欧美日韩视频| 99xxxx成人网| 久久色中文字幕| 国产女主播一区二区三区| 亚洲电影免费在线| 欧美精品大片| 亚洲三级性片| 欧美成人黄色小视频| 国产视频一区在线观看| 99视频一区| 久久久亚洲国产天美传媒修理工| 国产美女高潮久久白浆| 久久亚洲私人国产精品va媚药| 国产精品美腿一区在线看| 亚洲天堂网在线观看| 国产精品裸体一区二区三区| 亚洲视屏一区| 狠狠色丁香婷综合久久| 欧美一二三区在线观看| 国产综合香蕉五月婷在线| 免费在线视频一区| 亚洲精品日韩久久| 国产精品私人影院| 久久免费黄色| 亚洲国产成人在线| 欧美午夜片在线免费观看| 亚洲欧美视频在线观看| 国产原创一区二区| 欧美成人一区二区在线| 国产精品色午夜在线观看| 亚洲视频日本| 91久久视频| 在线日韩成人| 国产真实乱子伦精品视频| 欧美另类视频| 久久久999精品免费| 99在线精品视频| 亚洲精品在线三区| 亚洲国产精品高清久久久| 美日韩精品免费| 久久久久久一区二区| 亚洲小少妇裸体bbw| 亚洲精品网站在线播放gif| 亚洲成在线观看| 亚洲第一精品夜夜躁人人躁 | 国产视频在线观看一区 | 国产欧美精品| 国产精品亚洲аv天堂网| 欧美日韩精品系列| 欧美精品一区二区在线播放| 久久久视频精品| 一区二区日韩伦理片| 国产一区二区三区不卡在线观看 | 在线播放日韩| 亚洲精品乱码视频| 欧美亚洲系列| 欧美成人免费在线观看| 国产精品女人网站| 国产精品婷婷| 日韩亚洲国产精品| 久久超碰97人人做人人爱| 久久成人精品| 欧美三级第一页| 国产伊人精品| 99国内精品久久| 亚洲欧美日韩在线不卡| 免费日韩av片| 国产精品一级二级三级| 亚洲二区在线| 欧美黑人在线观看| 国产精品日本精品| 亚洲精品久久7777| 久久成人av少妇免费| 国产精品毛片一区二区三区| 亚洲欧洲精品一区二区三区 | 国产精品久久久爽爽爽麻豆色哟哟| 国产亚洲欧美一区| 老司机午夜精品视频| 欧美日韩午夜剧场| 亚洲精品国产精品国自产在线| 欧美成人嫩草网站| 一本色道久久88亚洲综合88| 蜜桃久久av一区| 黑人巨大精品欧美一区二区小视频 | 国产精品一区二区在线| 亚洲免费电影在线| 欧美日韩免费一区| 亚洲欧美韩国| 一区在线免费| 男人的天堂亚洲| 亚洲精品欧美日韩专区| 另类酷文…触手系列精品集v1小说| 亚洲啪啪91| 亚洲黄色成人久久久| 欧美日本免费一区二区三区| 亚洲欧美日韩爽爽影院| 亚洲一区二区三区中文字幕在线| 国产精品美女诱惑| 国产色综合天天综合网| 欧美特黄一级| 欧美精品电影| 久久se精品一区精品二区| 99re66热这里只有精品4| 在线日本高清免费不卡| 亚洲国产精品尤物yw在线观看| 国产精品夫妻自拍| 欧美色道久久88综合亚洲精品| 亚洲自拍三区| 亚洲一本视频| 一本一本久久a久久精品牛牛影视| 欧美视频专区一二在线观看| 国产精品综合久久久| 欧美视频导航| 欧美午夜精品久久久久久久|