Jeg vil gi nytt navn til en database, men får stadig feilen om at 'kunne ikke få eksklusiv lås' på databasen, noe som innebærer at det fortsatt er noen tilkoblinger som er aktive.
Hvordan kan jeg avslutte alle tilkoblinger til databasen slik at jeg kan gi den nytt navn?
Se Avslutt alle aktive tilkoblinger til en database.
Grunnen til at tilnærmingen som Adam foreslo ikke fungerer, er at i løpet av den tiden du sløyfer over de aktive tilkoblingene, kan det opprettes nye, og du vil savne dem. Artikkelen jeg lenket til bruker følgende tilnærming som ikke har denne ulempen:
-- 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 for å oppnå dette, erstatt 'DB_NAME' med databasen for å drepe alle tilkoblinger til:
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