杀死SQL Azure中的所有用户连接

时间:2010-09-27 03:59:51

标签: sql azure

我需要改变一个表,而Sql Azure只是旋转它的轮子。

我认为是因为某个地方正在访问该表。

如何查看谁正在访问我的表格以及如何终止他们的连接。

我正在寻找类似于

的东西
ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

将适用于sql azure

4 个答案:

答案 0 :(得分:2)

您可以使用sys.dm_exec_connections查看有关SQL Azure DB连接的信息。示例here under Monitoring Connections。您可以阻止SQL Firewall级别的错误连接,或者拒绝他们使用security stored procedures访问您关注的表格。

答案 1 :(得分:2)

任何有效的alter database都应该删除连接。例如,您可以更改大小 ALTER数据库演示MODIFY(MAXSIZE = 5 GB)

答案 2 :(得分:1)

SQL DB V12支持将数据库设置为受限用户模式(http://www.sqlindepth.com/alter-database-in-sql-v12/)。您也可以使用kill命令终止连接。或者更新防火墙规则只是为了允许你的IP。

答案 3 :(得分:0)

删除除您自己以外的数据库上的所有用户会话(您不允许这样做)

DECLARE @mySessionId INT
DECLARE @dbName VARCHAR(50)
SET @dbName = '<Your database name>'
DECLARE @spid int
CREATE TABLE #UserSessions (spid SMALLINT, ecid SMALLINT, [Status] NCHAR(30), loginname NCHAR(128), hostname NCHAR(128), blk CHAR(5), dbname NCHAR(128), cmd NCHAR(16), request_id INT)
INSERT INTO #UserSessions ([spid], ecid, [Status], [loginname], [hostname], blk, [dbname], cmd, request_id) EXEC dbo.sp_who

SELECT @spid = min(spid) FROM #UserSessions WHERE NOT hostname = HOST_NAME() AND dbName = @dbName AND [status] = 'sleeping'
WHILE @spid IS NOT NULL
    BEGIN
    EXECUTE ('KILL ' + @spid)
    SELECT @spid = min(spid) FROM #UserSessions WHERE NOT hostname = HOST_NAME() AND dbName = @dbName AND spid > @spid AND [status] = 'sleeping'
END

DROP TABLE #UserSessions