上所有正在運行的進程的主數據庫執行這個查詢,它給我的所有數據庫中所有正在運行的進程後, 有任何疑問這將殺死一個數據庫上運行的所有進程。如何殺死/終止SQL Server 2008中
USE
Master
GO
SELECT
SPID,DBID FROM SYSPROCESSES
WHERE
DBID NOT IN (1,2,3,4) AND SPID >50 AND SPID<> @@spid
上所有正在運行的進程的主數據庫執行這個查詢,它給我的所有數據庫中所有正在運行的進程後, 有任何疑問這將殺死一個數據庫上運行的所有進程。如何殺死/終止SQL Server 2008中
USE
Master
GO
SELECT
SPID,DBID FROM SYSPROCESSES
WHERE
DBID NOT IN (1,2,3,4) AND SPID >50 AND SPID<> @@spid
如果要強制所有其他的連接斷開,並且您有合適的權限,您可以進出的single user mode反彈數據庫:
alter database current set single_user with rollback immediate;
go
alter database current set multi_user;
go
到任何其他連接同一個數據庫將被終止。
請參見下面的SQL腳本來殺死一個給定的數據庫(SQL Server 2014)
Declare @DbName nvarchar(60)='YourDBName'
Declare @SPID int
--get all processes
DECLARE @Table TABLE(
SPID INT,
Status VARCHAR(MAX),
LOGIN VARCHAR(MAX),
HostName VARCHAR(MAX),
BlkBy VARCHAR(MAX),
DBName VARCHAR(MAX),
Command VARCHAR(MAX),
CPUTime INT,
DiskIO INT,
LastBatch VARCHAR(MAX),
ProgramName VARCHAR(MAX),
SPID_1 INT,
REQUESTID INT
)
INSERT INTO @Table EXEC sp_who2
--using cursor to kill all processes
Declare cur_KillAllProcesses CURSOR FAST_FORWARD FOR
Select
SPID
From @Table
WHERE [email protected]
OPEN cur_KillAllProcesses
FETCH NEXT FROM cur_KillAllProcesses INTO
@SPID
WHILE @@FETCH_STATUS=0
BEGIN
--add kill process command
Exec('KILL '+ @SPID)
FETCH NEXT FROM cur_KillAllProcesses INTO @SPID
END
CLOSE cur_KillAllProcesses
DEALLOCATE cur_KillAllProcesses
這是殺死進程的合理方式,謝謝 –
「這將殺死所有進程上運行數據庫」的所有進程 - 現在爲什麼地球上會有人想這樣做! –
@mitch:我們正在測試我們的虛擬數據庫,所以不用擔心 – Buzz
爲了什麼目的?如果你想要例如轉到單用戶模式,有辦法強制其他人斷開連接(['ROLLBACK IMMEDIATE'](http://msdn.microsoft.com/zh-cn/library/bb522682.aspx)) –