DB에 대한 기존 연결을 닫는 방법
MS SQL 서버에 대한 기존 연결을 종료하여 해당 데이터베이스에서 프로그래밍 방식으로 복원할 수 있습니다.
이렇게 하면 다른 모든 사용자의 연결이 끊어지고 사용자만 남게 됩니다.
alter database YourDb set single_user with rollback immediate
참고: 잊지 마십시오.
alter database YourDb set MULTI_USER
당신이 끝나면요!
복원 마법사에서 "대상 데이터베이스에 대한 기존 연결 닫기"를 클릭합니다.
데이터베이스 분리 마법사에서 "연결 끊기" 항목을 클릭합니다.
http://awesomesql.wordpress.com/2010/02/08/script-to-drop-all-connections-to-a-database/ 에서 찾을 수 있습니다.
DECLARE @dbname NVARCHAR(128)
SET @dbname = 'DB name here'
-- db to drop connections
DECLARE @processid INT
SELECT @processid = MIN(spid)
FROM master.dbo.sysprocesses
WHERE dbid = DB_ID(@dbname)
WHILE @processid IS NOT NULL
BEGIN
EXEC ('KILL ' + @processid)
SELECT @processid = MIN(spid)
FROM master.dbo.sysprocesses
WHERE dbid = DB_ID(@dbname)
END
커서를 다음과 같이 사용할 수 있습니다.
USE master
GO
DECLARE @SQL AS VARCHAR(255)
DECLARE @SPID AS SMALLINT
DECLARE @Database AS VARCHAR(500)
SET @Database = 'AdventureWorks2016CTP3'
DECLARE Murderer CURSOR FOR
SELECT spid FROM sys.sysprocesses WHERE DB_NAME(dbid) = @Database
OPEN Murderer
FETCH NEXT FROM Murderer INTO @SPID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'Kill ' + CAST(@SPID AS VARCHAR(10)) + ';'
EXEC (@SQL)
PRINT ' Process ' + CAST(@SPID AS VARCHAR(10)) +' has been killed'
FETCH NEXT FROM Murderer INTO @SPID
END
CLOSE Murderer
DEALLOCATE Murderer
저는 여기 제 블로그에 그것에 대해 썼습니다: http://www.pigeonsql.com/single-post/2016/12/13/Kill-all-connections-on-DB-by-Cursor
Stev.org 에서 제공하는 완벽한 솔루션: http://www.stev.org/post/2011/03/01/MS-SQL-Kill-connections-by-host.aspx
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KillConnectionsHost]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[KillConnectionsHost]
GO
/****** Object: StoredProcedure [dbo].[KillConnectionsHost] Script Date: 10/26/2012 13:59:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[KillConnectionsHost] @hostname varchar(MAX)
AS
DECLARE @spid int
DECLARE @sql varchar(MAX)
DECLARE cur CURSOR FOR
SELECT spid FROM sys.sysprocesses P
JOIN sys.sysdatabases D ON (D.dbid = P.dbid)
JOIN sys.sysusers U ON (P.uid = U.uid)
WHERE hostname = @hostname AND hostname != ''
AND P.spid != @@SPID
OPEN cur
FETCH NEXT FROM cur
INTO @spid
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CONVERT(varchar, @spid)
SET @sql = 'KILL ' + RTRIM(@spid)
PRINT @sql
EXEC(@sql)
FETCH NEXT FROM cur
INTO @spid
END
CLOSE cur
DEALLOCATE cur
GO
단답:
특정 데이터베이스의 컨텍스트가 아닌 "데이터베이스 컨텍스트 >> 복원 마법사"에서만 "대상 데이터베이스에 대한 기존 연결 닫기" 옵션이 표시됩니다.
긴 답변:
Right Click 다음과 같이 서버 이름 아래의 데이터베이스에 있습니다.
다음 옵션을 선택합니다. "데이터베이스 복원...그것으로부터.

데이터베이스 복원 마법사에서
- 복원할 데이터베이스 중 하나 선택
- 왼쪽 세로 메뉴에서 "옵션"을 클릭합니다.

여기서 "대상 데이터베이스에 대한 기존 연결 닫기" 확인란을 찾을 수 있습니다.

확인만 하면 복원 작업을 진행할 수 있습니다.
복원이 완료되면 모든 연결이 자동으로 재개됩니다.
최신 버전의 SQL Server Management Studio에서는 이제 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 '데이터베이스를 오프라인으로 전환'할 수 있습니다.데이터베이스에 대한 모든 활성 연결을 삭제하는 옵션이 제공됩니다.
언급URL : https://stackoverflow.com/questions/10388041/how-to-close-existing-connections-to-a-db
'programing' 카테고리의 다른 글
| 기존 Firebase 프로젝트의 영역을 변경하는 방법은 무엇입니까? (0) | 2023.07.19 |
|---|---|
| 쉼표로 구분된 목록으로 결과를 반환하는 PostgreSQL 쿼리 (0) | 2023.07.19 |
| 파이썬이 함수 정의를 인쇄할 수 있습니까? (0) | 2023.07.19 |
| 밑줄 대 변수 및 방법이 있는 이중 밑줄 (0) | 2023.07.19 |
| Matplotlib: 다른 그래프 요소 뒤에 격자선 그리기 (0) | 2023.07.19 |