2014-07-07 16 views
18

Nachdem eine DB-Bereitstellung (aus einem VS SQL Server-Datenbankprojekt) in einer lokalen Datenbank ausgeführt wurde, die fehlgeschlagen ist, wurde die Datenbank in einem Status mit Einzelbenutzermodus belassen (Die Bereitstellung wird als Einzelbenutzermodus ausgeführt.)SQL Server 2008 R2 im Einzelbenutzermodus blockiert

Als ich es von SSMS verbinden und versuchen, etwas wie folgt aus:

ALTER DATABASE MyDatabase 
SET MULTI_USER; 
GO 

ich den Fehler:

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.

Ich habe versucht, die Datenbank offline zu nehmen, die SSMS sagt mir gelingt, aber es scheint nichts zu tun. Bisher war ich nur in der Lage, dies zu umgehen, indem ich die Datenbank löschte und neu erstellte (was okay ist, weil es nur eine lokale Testdatenbank ist). Allerdings möchte ich den Status zurücksetzen können.

Wie kann ich SQL Server davon überzeugen, diese Datenbank aus dem Einzelbenutzermodus herauszunehmen?

Antwort

63

Im ersten Lauf folgende Abfrage in Master-Datenbank

exec sp_who 

Wenn Sie meistern kann nicht findet die Täter, versuchen

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

Dann alle Prozesse töten, die Ihre Datenbank mit folgenden Abfrage verwenden:

KILL spid 

Dann folgende Abfrage:

USE Master 
ALTER DATABASE YourDatabase SET MULTI_USER 
+1

Das hat super funktioniert - vielen Dank –

+2

Wenn Sie keine verdächtig aussehenden Einträge in der Ausgabe von sp_who finden können, hat mir diese Abfrage geholfen - SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID ('YourDatabase') – earthling42

+1

@ earthling42: Ich habe hinzugefügt Ihre (sehr nützliche) Anfrage an die Antwort –

0

Diese here beantwortet wurde, ist der Code:

use master 
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER 
+0

I don‘ Ich glaube, das ist das gleiche Problem - die DB wird es tun Lassen Sie keinen dieser Stations –

+0

haben Sie Master mit Ihrem Datenbanknamen ersetzen? Verfügen Sie auch über Administratorrechte für die Datenbank, die Sie ändern möchten? – Tristan

0

Verwenden DAC (Dedicated Admin Connection). Stellen Sie sicher, dass Sie es zuerst In SSMS Typ in Admin aktiviert haben: für Servername nach dem Verbinden ALTER DATABASE SET MULTI_USER

0

Versuchen Sie die folgenden Befehle

Zuerst laufen diese drei Befehle

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

Zweitens laufen diese beiden Befehle

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