2010-09-27 11 views
5

Necesito modificar una tabla y el Sql Azure simplemente gira sus ruedas.matar todas las conexiones de usuario en SQL Azure

Creo que es porque hay una conexión en algún lugar que está accediendo a esa mesa.

¿Cómo puedo ver quién está accediendo a mis tablas y cómo puedo terminar sus conexiones?

Busco algo similar a

ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

que trabajará con SQL Azure

+0

Por "simplemente hace girar sus ruedas", ¿Quiere decir que no se obtiene ningún mensaje en absoluto? Ningún error de ningún tipo? Hay una lista de argumentos ALTER que SQL Azure no admite en MSDN (http://msdn.microsoft.com/en-us/library/ee336286.aspx), pero todos estos deberían proporcionarle mensajes de error. – tijmenvdk

+0

¿Puede publicar la declaración ALTER real? El esquema de la tabla (script "CREATE") sería útil también. El modo Usuario único debería funcionar en el FYI de Azure, solo tiene que conectarse al db maestro –

+0

Esto no funciona como está en Azure, falla con "Sintaxis incorrecta cerca de 'SINGLE_USER'." –

Respuesta

2

Cualquier base de datos válida de alter debe desconectarse. Por ejemplo, puede cambiar el tamaño Demo de la base de datos ALTER MODIFICAR (MAXSIZE = 5 GB)

1

SQL DB V12 admite la configuración de la base de datos en modo de usuario restringido (http://www.sqlindepth.com/alter-database-in-sql-v12/). También puedes matar las conexiones usando el comando kill. Alternativamente, actualice las reglas del firewall solo para permitir su IP.

0

Borra todas las sesiones de usuario en una base de datos, excepto su propio (que no se les permite hacer)

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 
Cuestiones relacionadas