Der Grund, warum der von Adam vorgeschlagene Ansatz nicht funktioniert, ist, dass während der Zeit, in der Sie die aktiven Verbindungen durchlaufen, eine neue hergestellt werden kann und Sie diese vermissen werden. Sie können stattdessen den folgenden Ansatz verwenden, der diesen Nachteil nicht aufweist:
-- set your current connection to use master otherwise you might get an error
use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--do you stuff here
ALTER DATABASE YourDatabase SET MULTI_USER
Um dies zu erreichen, ersetzen Sie 'DB_NAME' durch die Datenbank, um alle Verbindungen zu beenden:
quelle
and spid <> @@SPID
derSELECT @sKillConnection
Anweisung hinzu , damit nicht versucht wurde, meine aktuelle Verbindung zu beenden, was zu einer Fehlermeldung führen würde.Töte es und töte es mit Feuer:
quelle
Verwenden von SQL Management Studio Express:
Klicken Sie in der Baumstruktur des Objekt-Explorers unter Verwaltung auf "Aktivitätsmonitor" (wenn Sie ihn dort nicht finden, klicken Sie mit der rechten Maustaste auf den Datenbankserver und wählen Sie "Aktivitätsmonitor" aus). Durch Öffnen des Aktivitätsmonitors können Sie alle Prozessinformationen anzeigen. Sie sollten in der Lage sein, die Sperren für die Datenbank zu finden, an der Sie interessiert sind, und diese Sperren aufzuheben, wodurch auch die Verbindung unterbrochen wird.
Danach sollten Sie umbenennen können.
quelle
Ich habe immer verwendet:
quelle
quelle
Offline zu nehmen dauert eine Weile und manchmal habe ich Probleme damit ..
Meiner Meinung nach der solideste Weg:
Trennen Klicken Sie mit der rechten Maustaste auf DB -> Aufgaben -> Trennen ... aktivieren Sie "Verbindungen trennen"
Erneutes Anhängen Klicken Sie mit der rechten Maustaste auf Datenbanken -> Anhängen .. Hinzufügen ... -> wählen Sie Ihre Datenbank aus und ändern Sie die Spalte Anhängen als in den gewünschten Datenbanknamen. OK
quelle
Verwenden Sie die 'Master'-Datenbank und führen Sie diese Abfrage aus. Dadurch werden alle aktiven Verbindungen aus Ihrer Datenbank beendet.
quelle
Normalerweise tritt dieser Fehler auf, wenn ich versuche, eine Datenbank wiederherzustellen. Normalerweise gehe ich in Management Studio einfach zum Anfang des Baums und klicke mit der rechten Maustaste auf den Datenbankserver und starte ihn neu (da er sich auf einem Entwicklungscomputer befindet, ist dies in der Produktion möglicherweise nicht ideal ). Dies schließt alle Datenbankverbindungen.
quelle
ALTER DATABASE ... SET SINGLE_USER
Befehle in anderen Antworten haben den gleichen Fehler "Exklusive Sperre konnte nicht erhalten werden" zurückgegeben).Klicken Sie in MS SQL Server Management Studio im Objekt-Explorer mit der rechten Maustaste auf die Datenbank. Wählen Sie im folgenden Kontextmenü "Aufgaben -> Offline nehmen".
quelle
Ein weiterer Ansatz "Kill it with Fire" besteht darin, den MSSQLSERVER-Dienst neu zu starten. Ich mache gerne Sachen über die Kommandozeile. Wenn Sie dies genau in CMD einfügen, können Sie Folgendes tun: NET STOP MSSQLSERVER & NET START MSSQLSERVER
Oder öffnen Sie "services.msc" und suchen Sie "SQL Server (MSSQLSERVER)". Klicken Sie mit der rechten Maustaste und wählen Sie "Neustart".
Dies wird "sicher, sicher" ALLE Verbindungen zu ALLEN Datenbanken beenden, die auf dieser Instanz ausgeführt werden.
(Ich mag dies besser als viele Ansätze, die die Konfiguration auf dem Server / der Datenbank ändern und zurücksetzen)
quelle
So können Sie solche Dinge in MS SQL Server Management Studio 2008 zuverlässig ausführen (funktioniert möglicherweise auch für andere Versionen):
quelle
Die Option, die in diesem Szenario für mich funktioniert, lautet wie folgt:
quelle
Versuche dies:
quelle
Klicken Sie mit der rechten Maustaste auf den Datenbanknamen, klicken Sie auf Eigenschaft, um das Eigenschaftenfenster abzurufen. Öffnen Sie die Registerkarte Optionen und ändern Sie die Eigenschaft "Zugriff einschränken" von "Mehrbenutzer" in "Einzelbenutzer". Wenn Sie auf OK klicken, werden Sie aufgefordert, alle offenen Verbindungen zu schließen. Wählen Sie "Ja" und Sie können die Datenbank umbenennen.
quelle
Diese funktionierten bei mir nicht (SQL2008 Enterprise), ich konnte auch keine laufenden Prozesse oder Benutzer sehen, die mit der Datenbank verbunden waren. Durch einen Neustart des Servers (Klicken Sie in Management Studio mit der rechten Maustaste auf SQL Server und wählen Sie Neu starten) konnte ich die Datenbank wiederherstellen.
quelle
Ich verwende SQL Server 2008 R2, meine Datenbank wurde bereits für einen einzelnen Benutzer festgelegt, und es gab eine Verbindung, die alle Aktionen in der Datenbank einschränkte. Daher reagierte die empfohlene SQLMenace- Lösung mit einem Fehler. Hier ist eine, die in meinem Fall funktioniert hat .
quelle
Ich benutze sp_who, um eine Liste aller Prozesse in der Datenbank zu erhalten. Dies ist besser, da Sie möglicherweise überprüfen möchten, welcher Prozess beendet werden soll.
Ergebnis
Sie können den Befehl in der KillCommand-Spalte verwenden, um den gewünschten Prozess abzubrechen.
quelle
Sie können den Befehl SP_Who verwenden und alle Prozesse beenden, die Ihre Datenbank verwenden, und dann Ihre Datenbank umbenennen.
quelle