Ik wil een database hernoemen, maar krijg steeds de foutmelding dat 'couldn't get exclusive lock' on the database, wat impliceert dat er nog connectie(s) actief zijn.
Hoe kan ik alle verbindingen met de database stoppen zodat ik hem kan hernoemen?
Zie Kill All Active Connections To A Database.
De reden dat de aanpak die Adam suggereerde niet zal werken is dat gedurende de tijd dat je de actieve verbindingen aan het overlopen bent er nieuwe kunnen worden gemaakt, en die zul je dan missen'en. Het artikel waarnaar ik linkte gebruikt de volgende aanpak die dit nadeel niet heeft:
-- 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
Script om dit te bereiken, vervang 'DB_NAME' door de database om alle verbindingen mee te verbreken:
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