Beim Löschen einer Datenbank kann man “close existing connections” auswählen. Beim Restore oder Detach kann man es leider nicht, hier bekommt man nach längerem Warten eine Fehlermeldung.
Die wohl bekannteste Möglichkeit Verbindungen zuschließen bietet der Activity Monitor. Hier sieht man alle Prozesse, diese kann man filtern und den gewünschten schließen. Leider nur einen Prozess nach dem anderen. Bei zu vielen Prozessen braucht man unter Umständen recht lange und läuft Gefahr dass in der Zwischenzeit wieder neue Verbindungen erstellt wurden.
Man kann aber auch per Script alle Verbindungen außer der eigenen schließen, indem man KILL verwendet:
1: DECLARE @dbName AS VARCHAR(200) = 'xyz'; -- DB_NAME()
2:
3: DECLARE @kill AS VARCHAR(max) = '';
4: SELECT @kill = @kill + 'KILL ' + STR([SPID]) + ';'
5: FROM master..sysprocesses
6: WHERE [DBID] = DB_ID(@dbName)
7: AND [SPID] <> @@SPID;
8:
9: EXEC(@kill);
Leider erlebe ich es oft, dass die Testumgebung blockiert ist und ein Update auf eine neue Version verhindert. Dann kommt man leider nicht dran vorbei alle Verbindungen zu schließen.
Ich persönlich lege solche Scripte ungern in der Datenbank ab, da sie meist in Produktion nicht benötigt werden. Besser finde ich es sie als Toolset zu sammeln. Dies kann man zusammen mit den Sourcen des Projektes oder als Teil des Projektes einchecken.
Sie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Instagram. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen