2016-11-10 117 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

相关问题