2010-09-27 9 views
5

Devo modificare una tabella e Sql Azure gira solo le sue ruote.elimina tutte le connessioni utente in SQL Azure

Penso che sia perché c'è una connessione da qualche parte che sta accedendo a quella tabella.

Come posso vedere chi accede ai miei tavoli e come posso terminare le loro connessioni.

Sto cercando qualcosa di simile a

ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

che funzionerà con SQL Azure

+0

Con il termine "semplicemente gira le ruote", vuoi dire che si ottiene alcun messaggio di sorta? Nessun errore di alcun tipo? Esiste un elenco di argomenti ALTER che SQL Azure non supporta su MSDN (http://msdn.microsoft.com/en-us/library/ee336286.aspx), ma tutti dovrebbero darti dei messaggi di errore. – tijmenvdk

+0

Potete per favore pubblicare l'attuale dichiarazione ALTER? Anche lo schema della tabella (script "CREATE") sarebbe utile. La modalità utente singolo dovrebbe funzionare in Azure FYI, devi solo connetterti al master db –

+0

Questo non funziona così com'è in Azure, fallisce con "Sintassi errata vicino a 'SINGLE_USER'." –

risposta

2

Qualsiasi valido alter database dovrebbe interrompere la connessione. Ad esempio, è possibile modificare le dimensioni della demo del database ALTER MODIFICA (MAXSIZE = 5 GB)

1

SQL DB V12 supporta l'impostazione del database in modalità utente con restrizioni (http://www.sqlindepth.com/alter-database-in-sql-v12/). Puoi anche uccidere le connessioni usando il comando kill. In alternativa, aggiorna le regole del firewall solo per consentire il tuo IP.

0

Elimina tutte le sessioni utente su un database, tranne il proprio (che non sono autorizzati a fare)

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 
Problemi correlati