Derzeit befindet sich meine Datenbank im Einzelbenutzermodus. Wenn ich versuche, meine Datenbank zu erweitern, wird folgende Fehlermeldung angezeigt:
Auf die Datenbank 'my_db' kann nicht zugegriffen werden. (ObjectExplorer)
Wenn ich versuche, die Datenbank zu löschen, wird folgende Fehlermeldung angezeigt:
Änderungen am Status oder an den Optionen der Datenbank 'my_db' können derzeit nicht vorgenommen werden. Die Datenbank befindet sich im Einzelbenutzermodus und ein Benutzer ist derzeit mit ihr verbunden.
Wie verlasse ich den Einzelbenutzermodus? Ich habe keinen Benutzer, der diese Datenbank verwendet.
Wenn ich versuche, meine Site mit IIS zu durchsuchen, wird folgender Fehler angezeigt:
Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zum Ursprung und Ort der Ausnahme können mithilfe der folgenden Ausnahmestapelverfolgung identifiziert werden.
Ich habe das Gefühl, dass der Einzelbenutzermodus dies verursacht.
quelle
Suchen Sie zunächst
KILL
alle aktuell ausgeführten Prozesse.Führen Sie dann die folgenden
T-SQL
Schritte aus, um die Datenbank in denMULTI_USER
Modus zu versetzen.quelle
Versuchen Sie Folgendes, um den Einzelbenutzermodus zu verlassen:
ALTER DATABASE [my_db] SET MULTI_USER
Um in den Einzelbenutzermodus zurückzukehren, können Sie Folgendes verwenden:
ALTER DATABASE [my_db] SET SINGLE_USER
quelle
quelle
Ich habe versucht, das funktioniert
quelle
Ich hatte das gleiche Problem und die zu tötende Sitzungs-ID wurde mithilfe dieser Abfrage gefunden:
quelle
Drücken Sie STRG + 1
Suchen Sie den Prozess, der Ihre Datenbank sperrt. Suchen Sie in der Spalte Datenbankname nach Ihrer Datenbank und notieren Sie die Spid. Jetzt müssen Sie diese Anweisung ausführen:
quelle
Folgendes hat bei mir funktioniert:
quelle
Eine andere Option ist:
ALTER DATABASE [Your_Db] SET MULTI_USER
quelle
Nur für den Fall, dass jemand auf diesen Thread stößt, finden Sie hier eine kugelsichere Lösung für SQL Server, die im SINGLE USER MODE steckt
- Holen Sie sich die Prozess-ID (Spid) der Verbindung, die Sie beenden müssen.
- Ersetzen Sie 'DBName' durch den tatsächlichen Namen der DB
Alternativ können Sie auch den Befehl "sp_who" verwenden, um die "spid" der offenen Verbindung abzurufen:
- Oder verwenden Sie stattdessen diesen SP
- Führen Sie dann Folgendes aus und ersetzen Sie [spid] und [DBName] durch korrekte Werte
quelle
Ich bin mir nicht sicher, ob dies jemandem hilft, aber ich hatte das gleiche Problem und konnte den Prozess, der mich aufhielt, nicht finden. Ich habe SSMS geschlossen und alle Dienste gestoppt, die auf die lokale Instanz treffen. Als ich dann wieder hineinging und den exec sp_who2 ausführte, zeigte er mir den Schuldigen. Ich habe den Prozess abgebrochen und konnte den Multi_User zum Laufen bringen und dann die Dienste neu starten. Wir ließen IIS alle paar Minuten / Sekunden nach bestimmten Paketen suchen.
quelle
Ich bin heute Morgen auf dasselbe Problem gestoßen. Es stellte sich als einfaches Problem heraus. Ich hatte ein Abfragefenster geöffnet, das im Objekt-Explorer auf die Einzelbenutzerdatenbank eingestellt war. Die gespeicherte Prozedur sp_who2 zeigte dann keine Verbindung an. Nachdem ich es geschlossen hatte, konnte ich es einstellen
quelle
Hinzufügen zu Jespers Antwort , um noch effektiver zu sein:
SET DEADLOCK_PRIORITY HIGH
VerwendungenDEADLOCK_PRIORITY
von 5.Was passiert ist, dass die anderen Prozesse einen Riss in der Datenbank bekommen und wenn Ihr Prozess einen niedrigeren hat
DEADLOCK_PRIORITY
, verliert er das Rennen.Dies vermeidet das Auffinden und Töten der anderen Spid (was möglicherweise mehrmals durchgeführt werden muss).
Es ist möglich, dass Sie
ALTER DATABASE
mehr als einmal laufen müssen (aber Jesper macht das). Geänderter Code:quelle
Verwenden Sie dieses Skript
Suchen Sie den Datenbanknamen und die Spid-Spalte
jetzt ausführen
quelle
Heute hatte ich das gleiche Problem, bei dem meine Datenbank vom Mehrbenutzer- in den Einzelbenutzermodus geändert wurde, und dies hinderte mich schließlich daran, die Datenbank zu veröffentlichen.
Um dieses Problem zu beheben, musste ich alle Visual Studio-Instanzen schließen und den folgenden Befehl im SQL Server-Abfragefenster ausführen.
Dieser Befehl hat die Datenbank von Einzelbenutzer auf Mehrbenutzer geändert und danach konnte ich erfolgreich veröffentlichen.
quelle
Selbst wenn ich auf dasselbe Problem stoße, kann ich keine aktiven Verbindungen zu my_db finden, um es zu beenden, aber es wird immer noch der gleiche Fehler angezeigt. Am Ende trenne ich alle möglichen SSMS-Verbindungen für eine Datenbank auf dem Server, erstelle eine neue Verbindung von SSMS und ändere sie in Mehrbenutzer.
Hinweis: Dies scheint ein möglicher Fehler in SQL Server 2005 zu sein!
quelle
Wir haben dies gerade in SQL 2012 erlebt. Ein Replikationsprozess hat begonnen, als wir die ursprüngliche Sitzung beendet haben, in der sie auf einen einzelnen Benutzer festgelegt wurde. Aber sp_who2 hat diesen neuen Prozess, der an die Datenbank angehängt ist, nicht angezeigt. Durch das Schließen von SSMS und das erneute Öffnen konnten wir diesen Prozess in der Datenbank sehen und ihn dann beenden und sofort in den Multi-User-Modus wechseln, und das funktionierte.
Ich kann die Logik dahinter nicht herausarbeiten, aber es scheint ein Fehler in SSMS zu sein und manifestiert sich immer noch in SQL 2012.
quelle
benutze Master
GEHEN
Wählen Sie d.name, d.dbid, spid, login_time, nt_domain, nt_username, loginame aus sysprocesses p inner join sysdatabases d auf p.dbid = d.dbid wobei d.name = 'database name'
töte 568 - töte Spid
ALTER DATABASE Datenbankname '
SET MULTI_USER gehen
quelle