2012-06-11 38 views
6

Sau khi thực hiện truy vấn này trên db chủ, nó cho tôi tất cả tiến trình đang chạy trên tất cả các cơ sở dữ liệu, là có bất kỳ truy vấn nào sẽ giết tất cả tiến trình đang chạy trên cơ sở dữ liệu.Làm thế nào để giết/Chấm dứt tất cả quá trình chạy trên 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 
+1

"sẽ giết tất cả quá trình đang chạy trên một cơ sở dữ liệu" - bây giờ tại sao trên trái đất ai sẽ muốn làm điều đó ! –

+0

@mitch: chúng tôi đang thử nghiệm trên cơ sở dữ liệu giả của chúng tôi, vì vậy không cần phải lo lắng – Buzz

+1

Để kết thúc là gì? Nếu bạn muốn, ví dụ: chuyển sang chế độ người dùng đơn, có nhiều cách buộc mọi người khác ngắt kết nối (['ROLLBACK IMMEDIATE'] (http://msdn.microsoft.com/en-us/library/bb522682.aspx)) –

Trả lời

16

Nếu bạn muốn để buộc tất cả các kết nối khác để ngắt kết nối, và bạn có quyền thích hợp, bạn có thể trả lại cơ sở dữ liệu vào và ra khỏi single user mode:

alter database current set single_user with rollback immediate; 
go 
alter database current set multi_user; 
go 

Bất kỳ kết nối khác đến cùng một cơ sở dữ liệu sẽ bị chấm dứt.

+0

"ALTER DATABASE current ..." chỉ được hỗ trợ từ SQL Server 2012 và forward – Sharken

+0

@Sharken - yes, 'current' chỉ được hỗ trợ vào năm 2012. Đối với các phiên bản trước, bạn phải đặt tên cho cơ sở dữ liệu. –

+0

Bạn vừa mới cứu mạng tôi! – Bobby

1

Bạn có thể sử dụng câu lệnh KILL kết hợp với con trỏ trên kết quả truy vấn ở trên.

Xem Kill (Transact-SQL)

+3

Vâng, bạn có thể .... nhưng bạn sẽ bị điên .... –

1

Xin vui lòng xem bên dưới SQL script để giết tất cả các quy trình cho một cơ sở dữ liệu nhất định (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 
+0

Đó là cách hợp lý để tiêu diệt quy trình, Cảm ơn người đàn ông –

Các vấn đề liên quan