国产一级一区二区_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久久夜色精品国产_欧美色网一区二区
亚洲手机成人高清视频| 国产 欧美在线| 一本色道久久综合亚洲91| 51午夜精品国产| 蜜桃视频在线观看一区二区| 欧美性生活久久| 国产视频一区不卡| 国产一区 二区 三区一级| 欧美成人精品3d动漫h| 毛片av中文字幕一区二区| 欧美一区二区三区免费大片| 日日夜夜精品免费视频| 日韩一级黄色大片| 奇米一区二区三区av| 91精品国产欧美一区二区成人| 亚洲五月六月丁香激情| 欧美大片在线观看一区二区| 精品一区二区在线看| 久久久久久99久久久精品网站| 欧美一区二区在线看| 毛片基地黄久久久久久天堂| 久久一日本道色综合| 在线精品视频一区二区三四| 天堂va蜜桃一区二区三区漫画版| 6080日韩午夜伦伦午夜伦| 成人午夜激情在线| 亚洲综合久久av| 国产精品免费网站在线观看| 91久久精品一区二区三区| 日韩精品色哟哟| 亚洲日本在线天堂| 欧美一区二区播放| 成人av网站在线观看免费| 美女网站一区二区| 亚洲人一二三区| 精品国产一二三区| 色狠狠一区二区| 黄色精品一二区| 亚洲一区二区在线免费看| 精品久久久久久久久久久久久久久 | 欧美视频你懂的| 久久综合综合久久综合| 亚洲国产人成综合网站| 久久久久久一级片| 欧美色手机在线观看| 99久久国产综合色|国产精品| 日韩综合小视频| 2019国产精品| 日韩美一区二区三区| 91丨九色丨黑人外教| 国产精品123| 三级不卡在线观看| 国产精品卡一卡二卡三| 国产三区在线成人av| 这里只有精品视频在线观看| 国精产品一区一区三区mba桃花| 亚洲区小说区图片区qvod| 精品国产一区二区三区忘忧草| 欧美一卡二卡三卡四卡| 欧美日本一道本在线视频| 99久久精品国产精品久久| aaa欧美色吧激情视频| 激情久久久久久久久久久久久久久久| 中文字幕中文在线不卡住| 中文一区二区在线观看| 久久精品一区蜜桃臀影院| 国产精品免费久久| 国产精品私人自拍| 欧美国产丝袜视频| 亚洲欧美韩国综合色| 国产精品国产馆在线真实露脸 | 欧美在线短视频| 91在线一区二区三区| 蜜桃视频一区二区三区| 久久国产夜色精品鲁鲁99| 午夜精品成人在线视频| 久久精品人人做| 亚洲欧美日韩系列| 欧美一区二区三区的| 色欲综合视频天天天| 精品一区二区在线看| 视频在线观看一区| 麻豆91精品91久久久的内涵| 午夜免费久久看| 亚洲午夜成aⅴ人片| 色综合久久六月婷婷中文字幕| 日韩毛片精品高清免费| 最新久久zyz资源站| 国产精品美女久久久久久2018| 久久女同互慰一区二区三区| 欧美日韩午夜在线视频| 欧洲精品在线观看| 欧美日韩一区久久| 欧美男男青年gay1069videost| 欧美日韩国产影片| 欧美电视剧在线看免费| 亚洲天堂免费在线观看视频| 亚洲免费在线视频一区 二区| 国产精品欧美综合在线| 亚洲夂夂婷婷色拍ww47| 日韩电影免费在线看| 国产精品一区二区果冻传媒| 成人黄色a**站在线观看| 色综合久久综合网欧美综合网| 日韩一卡二卡三卡四卡| 欧美精品一区二区三区蜜桃| 天天做天天摸天天爽国产一区| 国产精品久久久久精k8| 国产精品嫩草影院av蜜臀| 综合中文字幕亚洲| 奇米在线7777在线精品| 另类小说色综合网站| 丰满少妇在线播放bd日韩电影| 日本精品视频一区二区| 欧美电影免费观看高清完整版在线观看| 在线亚洲一区二区| 亚洲品质自拍视频网站| 1024亚洲合集| 一区二区三区 在线观看视频| 亚洲综合色丁香婷婷六月图片| 久久国内精品自在自线400部| 成人黄色电影在线| 久久―日本道色综合久久| 一区二区三区蜜桃| 国产精品一区免费在线观看| 欧美一区二区在线视频| 自拍偷拍亚洲欧美日韩| 成人午夜在线视频| 91精品国产综合久久久久| 日韩一区在线播放| 成人免费av网站| 亚洲精品在线三区| 亚洲一区二区免费视频| 99国产精品久久久久| 久久久影视传媒| 国产福利电影一区二区三区| 4438x成人网最大色成网站| 日韩无一区二区| 蜜桃一区二区三区在线观看| 欧美无砖砖区免费| 日日夜夜精品视频天天综合网| 91麻豆精品一区二区三区| 精品88久久久久88久久久| 国精产品一区一区三区mba桃花 | 欧美大片国产精品| 又紧又大又爽精品一区二区| 色妹子一区二区| 亚洲精品国产品国语在线app| 国产盗摄女厕一区二区三区| 国产欧美一区二区三区在线老狼| 男女视频一区二区| 免费av网站大全久久| 精品伦理精品一区| 国产在线精品不卡| 综合久久久久久| 色菇凉天天综合网| 国产三级精品三级| 成人ar影院免费观看视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 777精品伊人久久久久大香线蕉| 最新国产の精品合集bt伙计| 91福利精品视频| 一区二区三区在线高清| 欧美午夜视频网站| 美美哒免费高清在线观看视频一区二区| 欧美日韩免费不卡视频一区二区三区| 欧美日韩不卡视频| 欧美精品一区二区三区视频| 精品写真视频在线观看| 欧美二区乱c少妇| 免费高清视频精品| 国产午夜亚洲精品理论片色戒| 久久精品国产澳门| 国产欧美久久久精品影院| av高清久久久| 日韩视频免费观看高清完整版 | 欧美在线视频你懂得| 婷婷亚洲久悠悠色悠在线播放| 欧美一卡二卡在线观看| 日韩av在线发布| 久久久影视传媒| 欧美成人精品1314www| 亚洲欧美偷拍另类a∨色屁股| 中文在线免费一区三区高中清不卡| 成人av在线一区二区三区| 自拍偷自拍亚洲精品播放| 日韩美女一区二区三区四区| av中文字幕不卡| 日韩av电影一区| 国产精品久久久久久久久免费丝袜| 欧美狂野另类xxxxoooo| jlzzjlzz国产精品久久| 精品一区二区在线观看| 日本aⅴ免费视频一区二区三区| 制服丝袜av成人在线看| 欧美在线制服丝袜| 色综合咪咪久久| 成人动漫中文字幕| 国产91精品在线观看| 久久婷婷色综合|