SQLServer数据库批量kill会话的脚本(慎用!)

微软大佬提供的一个批量 kill会话的脚本,很凶很暴力,慎用慎用慎用!尤其是涉及大事务时。

請注意:如果資料庫還在正在 Recovery 階段無效,因為無法 Kill 系統 Session,必須等候 Recovery 完畢(或是重建交易紀錄檔案)。

/*
Function : Kill all SPID on specific database and Repair
Written by Ray Yen 2010/04/09
Modified by Ray Yen 2018/11/20
*/

DECLARE @DBID INT
DECLARE @DATABASENAME NVARCHAR(60)
SET @DATABASENAME =[Database_Name] --Please modify the database name 
Select Top 1 @DBID = DBID from sys.sysdatabases Where Name = @DATABASENAME
PRINT 'Database Name : ' + @DATABASENAME
PRINT 'Database ID : ' + LTRIM(STR(@DBID))
PRINT '---------------------------------------'

DECLARE @nKillProcess INT
DECLARE @nFetchStatus INT
DECLARE @sTemp NVARCHAR(255) 
DECLARE curProcesses CURSOR
LOCAL
FAST_FORWARD
READ_ONLY
FOR
SELECT spid
FROM
Master..sysprocesses
WHERE
dbid = @DBID

OPEN curProcesses

FETCH NEXT FROM curProcesses INTO --Gets the first process
@nKillProcess
SET @nFetchStatus = @@FETCH_STATUS

--Kill the processes
WHILE @nFetchStatus = 0
BEGIN
SET @sTemp ='KILL ' + CAST(@nKillProcess as varchar(5))
PRINT @sTemp
EXEC(@sTemp)
FETCH NEXT FROM curProcesses INTO --Gets the next process
@nKillProcess
SET @nFetchStatus = @@FETCH_STATUS
END
CLOSE curProcesses
DEALLOCATE curProcesses

 

posted on 2024-07-03 19:17  王.小辉  阅读(38)  评论(0编辑  收藏  举报

导航