2016-11-10 116 views
0

我曾嘗試下面的代碼,殺人比Master數據庫其他的SQL連接殺死活動連接保持:SQL服務器:通過主數據庫

DECLARE @kill varchar(8000) = ''; 

SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';' 
FROM sys.dm_exec_sessions 
WHERE database_id = db_id('MyDB') 

EXEC(@kill); 

此代碼爲我工作得很好。但是當我運行下面查詢看到更多的活動連接,然後我發現我的MASTER數據庫有21個活動連接。

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections, 
    loginame as LoginName 
FROM 
    sys.sysprocesses 
WHERE 
    dbid > 0 
GROUP BY 
    dbid, loginame 

,而我想關閉與主數據庫所有活動的連接,然後它失敗,錯誤信息是:「不能用殺來殺自己的過程」

請讓我知道,我怎麼能從'sa'帳戶持有的MASTER數據庫中終止所有21個活動連接?

非常感謝您的支持。

/保羅

+0

你是否從不同的數據庫運行代碼?另外,確保沒有活動窗口打開,指向'master'數據庫。 –

+0

嗨,埃裏克,謝謝,是的,我做了,然後錯誤信息是「只有用戶進程可以被殺死」。現在,我正在研究這些連接是如何由'sa'及其大約23個並且始終處於活動狀態的。 – Paul

回答

0

你可以殺死把你的數據庫在單用戶模式數據庫中的所有活動的連接,我通常這樣做時,我試圖恢復在現有的INUSE數據庫。類似......

USE master; 
GO 

ALTER DATABASE [DB_Name] 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
GO 

USE [DB_Name] --<-- Grab that single available conncection 
GO 

USE master;  --<-- Now no more connections to your database Tadaaaaa... 
GO 
+0

嗨阿里,謝謝,在這種情況下,你可以殺死所有其他數據庫,但不是主數據庫。我確切的問題是:我的主數據庫通過'sa'登錄有23個活動連接。我找不到這些連接是如何工作的?或者如果我想殺死那些人,該怎麼做?按照你建議的方式,你不能殺死主數據庫連接。 – Paul

相關問題