SQL Server 2005 데이터베이스에 대한 현재 연결을 모두 종료하는 방법

sql-server sql-server-2005


데이터베이스 이름을 바꾸고 싶지만 데이터베이스에서 '배타적 잠금을 얻을 수 없습니다'라는 오류가 계속 발생합니다. 이는 여전히 일부 연결이 활성화되어 있음을 의미합니다.

이름을 바꿀 수 있도록 데이터베이스에 대한 모든 연결을 종료하려면 어떻게해야합니까?




Answer 1 SQLMenace


Adam이 제안한 접근 방식이 작동하지 않는 이유 는 활성 연결을 반복하는 동안 새로운 연결을 설정할 수 있고이를 놓칠 수 있기 때문입니다. 대신 이러한 단점이없는 다음 접근 방식을 사용할 수 있습니다.

-- 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



Answer 2 Adam


이를 수행하기위한 스크립트, 'DB_NAME'을 데이터베이스로 대체하여 다음에 대한 모든 연결을 종료합니다.

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



Answer 3 btk


죽이고 불로 죽여라.

USE master
go

DECLARE @dbname sysname
SET @dbname = 'yourdbname'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END



Answer 4 Joseph Daigle


SQL Management Studio Express 사용 :

개체 탐색기 트리에서 관리 아래의 "활동 모니터"로 드릴 다운합니다 (찾을 수없는 경우 데이터베이스 서버를 마우스 오른쪽 단추로 클릭하고 "활동 모니터"를 선택). Activity Monitor를 열면 모든 프로세스 정보를 볼 수 있습니다. 관심있는 데이터베이스에 대한 잠금을 찾고 해당 잠금을 종료 할 수 있어야합니다. 그러면 연결도 종료됩니다.

그 후에 이름을 바꿀 수 있어야합니다.




Answer 5 brendan


나는 항상 사용했습니다 :


ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 
SP_RENAMEDB 'DB_NAME','DB_NAME_NEW'
Go 
ALTER DATABASE DB_NAME_NEW  SET MULTI_USER -- set back to multi user 
GO