2010-09-27 55 views
5

我需要更改表並且Sql Azure只是旋轉它的輪子。終止SQL Azure中的所有用戶連接

我認爲它是因爲有一個連接訪問該表的某處。

如何查看誰在訪問我的表以及如何終止他們的連接。

我正在尋找類似的東西,以

ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

將與SQL Azure的

+0

通過「只是旋轉的輪子」,你的意思是你沒有任何消息?沒有任何錯誤?有一個SQL Azure在MSDN上不支持的ALTER參數列表(http://msdn.microsoft.com/en-us/library/ee336286.aspx),但這些都應該給你提供錯誤信息。 – tijmenvdk 2010-09-27 07:03:55

+0

你可以請發表實際的ALTER聲明嗎?表架構(「CREATE」腳本)也會有幫助。單用戶模式應該在Azure FYI中工作,您只需連接到主數據庫 – 2010-09-27 15:39:33

+0

這在Azure中不起作用,它會以「SINGLE_USER附近的語法不正確」失敗。 – 2013-10-01 21:37:49

回答

2

任何有效的alter database都應該斷開連接。例如,您可以更改大小 ALTER數據庫演示修改(MAXSIZE = 5 GB)

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