Ich möchte eine Datenbank umbenennen, erhalte aber immer wieder die Fehlermeldung 'couldn't get exclusive lock' auf die Datenbank, was bedeutet, dass noch eine oder mehrere Verbindungen aktiv sind.
Wie kann ich alle Verbindungen zur Datenbank beenden, so dass ich sie umbenennen kann?
Siehe Alle aktiven Verbindungen zu einer Datenbank beenden.
Der Grund, warum der von [Adam vorgeschlagene] Ansatz (https://stackoverflow.com/questions/11620/how-do-you-kill-all-current-connections-to-a-sql-server-2005-database/11627#11627) nicht funktioniert, ist, dass in der Zeit, in der Sie die aktiven Verbindungen in einer Schleife durchgehen, neue Verbindungen aufgebaut werden können, die Sie dann verpassen. Der Artikel, den ich verlinkt habe, verwendet den folgenden Ansatz, der diesen Nachteil nicht hat:
-- 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
Skript, um dies zu erreichen, ersetzen Sie 'DB_NAME' durch die Datenbank, zu der alle Verbindungen abgebrochen werden sollen:
USE master
GO
SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''
Set @DBName = 'DB_NAME'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
Klicken Sie in MS SQL Server Management Studio im Objekt-Explorer mit der rechten Maustaste auf die Datenbank. Wählen Sie im folgenden Kontextmenü 'Tasks -> Offline nehmen'