2014-07-07 12 views
18

Dopo aver eseguito una distribuzione DB (da un progetto di database VS SQL Server) su un database locale, che non è riuscito, il database è stato lasciato in uno stato in cui è stata lasciata la modalità utente singolo (la distribuzione viene eseguita come modalità utente singolo).SQL Server 2008 R2 bloccato in modalità Utente singolo

Quando mi collego ad esso da SSMS e provare qualcosa di simile al seguente:

ALTER DATABASE MyDatabase 
SET MULTI_USER; 
GO 

ottengo l'errore:

Changes to the state or options of database 'MyDatabase' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.

ho cercato di prendere il database non in linea, che SSMS mi dice riesce, ma non sembra davvero fare nulla. Finora, sono stato in grado di aggirare tutto questo semplicemente rilasciando e ricreando il database (che è un po 'ok, perché è solo un database di test locale). Tuttavia, mi piacerebbe essere in grado di ripristinare lo stato.

Come posso convincere SQL Server a rimuovere questo database dalla modalità utente singolo?

risposta

63

In prima esecuzione seguente query nel database master

exec sp_who 

Se non è possibile trovare il colpevole, provare

SELECT request_session_id FROM sys.dm_tran_locks 
WHERE resource_database_id = DB_ID('YourDatabase') 

poi uccidere tutti i processi che utilizzano il database con query seguente:

KILL spid 

Quindi eseguire query seguente:

USE Master 
ALTER DATABASE YourDatabase SET MULTI_USER 
+1

Che ha funzionato alla grande - molte grazie –

+2

Se non riesci a trovare alcuna voce sospetta nell'output sp_who, questa query mi ha aiutato - SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID ('YourDatabase') – earthling42

+1

@ earthling42: ho aggiunto la tua (molto utile) domanda alla risposta –

0

Questo è stato risposto here, il codice è:

use master 
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER 
+0

I don' Credo che sia lo stesso problema - lo farà il DB non consentire a nessuna di queste posizioni –

+0

di sostituire il master con il nome del database? Inoltre, hai i privilegi di amministratore sul database che vuoi modificare? – Tristan

0

Usa DAC (Dedicated Admin Connection). Assicurarsi di aver permesso prima In Tipo di SSMS in admin: per Server Nome dopo la connessione a padroneggiare ALTER DATABASE SET MULTI_USER

0

provare il seguito comandi

Prima eseguire questi tre comandi

USE [master] 
SET DEADLOCK_PRIORITY HIGH 
exec sp_dboption MyDBName, 'single user', 'FALSE'; 

Seconda eseguire questi due comandi

ALTER DATABASE MyDBName SET MULTI_USER WITH NO_WAIT 
ALTER DATABASE MyDBName SET MULTI_USER WITH ROLLBACK IMMEDIATE 
Problemi correlati