2010-09-27 4 views
5

Je dois modifier une table et la Sql Azure tourne simplement ses roues.tue toutes les connexions utilisateur dans SQL Azure

Je pense que c'est parce qu'il y a une connexion quelque part qui accède à cette table.

Comment puis-je voir qui accède à mes tables et comment puis-je mettre fin à leurs connexions.

Je cherche quelque chose de similaire à

ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

qui fonctionnera avec sql azur

+0

Par « juste fait tourner ses roues », voulez-vous dire que vous obtenez aucun message que ce soit? Aucune erreur d'aucune sorte? Il existe une liste d'arguments ALTER que SQL Azure ne prend pas en charge sur MSDN (http://msdn.microsoft.com/en-us/library/ee336286.aspx), mais ceux-ci doivent tous vous donner des messages d'erreur. – tijmenvdk

+0

Pouvez-vous s'il vous plaît poster l'instruction ALTER réelle? Le schéma de la table (script "CREATE") serait également utile. Le mode mono-utilisateur devrait fonctionner dans Azure FYI, il vous suffit de vous connecter au master db –

+0

Cela ne fonctionne pas tel quel dans Azure, il échoue avec "Syntaxe incorrecte près de 'SINGLE_USER'." –

Répondre

2

Toute base de données valide doit être supprimée. Par exemple, vous pouvez modifier la taille Démonstration de la base de données ALTER MODIFY (MAXSIZE = 5 Go)

1

SQL DB V12 prend en charge la définition de la base de données en mode utilisateur restreint (http://www.sqlindepth.com/alter-database-in-sql-v12/). Vous pouvez également tuer les connexions en utilisant la commande kill. Vous pouvez également mettre à jour les règles du pare-feu uniquement pour autoriser votre adresse IP.

0

supprime toutes les sessions utilisateur sur une base de données, à l'exception de votre propre (que vous n'êtes pas autorisé à le faire)

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 
Questions connexes