백업을 복원할 때 모든 활성 연결을 끊으려면 어떻게 해야 합니까?
SQL Server 2005가 활성 연결로 인해 백업을 복원하지 않습니다.어떻게 해야 돼?
db를 단일 사용자 모드로 설정하고 복원을 수행한 후 다중 사용자로 다시 설정하는 경우:
ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK AFTER 60 --this will give your current connections 60 seconds to complete
--Do Actual Restore
RESTORE DATABASE YourDB
FROM DISK = 'D:\BackUp\YourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:\Data\YourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:\Data\YourLDFFile.ldf'
/*If there is no error in statement before database will be in multiuser
mode. If error occurs please execute following command it will convert
database in multi user.*/
ALTER DATABASE YourDB SET MULTI_USER
GO
참고 자료 : Pinal Dave ( http://blog.SQLAuthority.com )
공식 레퍼런스: https://msdn.microsoft.com/en-us/library/ms345598.aspx
SQL Server Management Studio 2005
하여 [ ]을 클릭합니다.Tasks
다음 을 클릭합니다.Detach Database
액티브한 접속과의 다이얼로그가 표시됩니다.
"메시지" 아래의 하이퍼링크를 클릭하면 활성 연결을 끊을 수 있습니다.
그런 다음 데이터베이스를 분리하지 않고 연결을 끊을 수 있습니다.
자세한 내용은 이쪽.
SQL Server Management Studio 2008
SQL Server Management studio 2008에서 인터페이스가 변경되었습니다.다음은 Tim Leung을 통한 순서입니다.
- 개체 탐색기에서 서버를 마우스 오른쪽 버튼으로 클릭하고 '활동 모니터'를 선택합니다.
- 이 창이 열리면 프로세스 그룹을 확장합니다.
- 이제 드롭다운을 사용하여 데이터베이스 이름으로 결과를 필터링합니다.
- Kill Process(프로세스 종료) 옵션을 오른쪽 클릭하여 서버 연결을 끊습니다.
이 코드가 효과가 있었어요 데이터베이스의 기존 연결을 모두 끊어버렸어요Set @dbname = 'databaseName' 행을 변경하여 데이터베이스 이름을 지정하기만 하면 됩니다.
Use Master
Go
Declare @dbname sysname
Set @dbname = 'databaseName'
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
이 후에 나는 그것을 복원할 수 있었다.
이것을 시험해 보세요.
DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
spid
FROM
master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
@spid
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
EXECUTE(@SQLCommand)
FETCH NEXT FROM UserCursor INTO
@spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO
SQL Server를 다시 시작하면 사용자의 연결이 끊어집니다.내가 찾은 가장 쉬운 방법 - 서버를 오프라인으로 전환하려는 경우에도 좋습니다.
그러나 매우 이상한 이유로 '오프라인으로 전환' 옵션은 이 작업을 확실하게 수행할 수 없으며 관리 콘솔이 중단되거나 혼란스러울 수 있습니다.다시 시작한 후 오프라인으로 전환
경우에 따라서는, 접속의 발신기지인 Web 서버를 정지하고 있는 경우 등, 이것이 옵션인 경우가 있습니다.
SQL Server 2008에서 복원 프로세스를 자동화하는 동안 이 문제가 발생했습니다.저의 (성공적인) 접근법은 제공된 두 가지 답변이 혼재된 것이었습니다.
먼저, 나는 그 데이터베이스의 모든 연결을 우연히 발견해서 그들을 죽인다.
DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
Execute ('Kill ' + @spid)
Select @spid = top 1 spid from master.dbo.sysprocesses
where dbid = db_id('dbName')
End
다음으로 데이터베이스를 single_user 모드로 설정합니다.
ALTER DATABASE dbName SET SINGLE_USER
그런 다음 복원을 실행합니다.
RESTORE DATABASE and whatnot
연결을 다시 끊습니다.
(same query as above)
데이터베이스를 multi_user로 되돌립니다.
ALTER DATABASE dbName SET MULTI_USER
이렇게 하면 싱글모드로 설정하기 전에 데이터베이스를 지연시키는 접속이 없는지 확인할 수 있습니다.싱글모드가 있으면 접속이 정지되기 때문입니다.
이 중 어느 것도 작동하지 않아 현재 사용자를 삭제하거나 연결을 끊을 수 없었습니다.또한 DB에 대한 활성 연결을 볼 수 없습니다.SQL Server 재시작(우클릭 후 재시작 선택)을 통해 이 작업을 수행할 수 있었습니다.
또한 IIS를 통해 실행 중인 웹 앱이 DB를 사용하는 경우 복원하는 동안 해당 앱 풀을 중지(재활용하지 않음)했다가 다시 시작해야 할 수도 있습니다.앱 풀을 중지하면 활성 HTTP 연결이 끊어지고 더 이상 허용되지 않습니다. 그렇지 않으면 데이터베이스에 연결하는 프로세스가 트리거되어 잠길 수 있습니다.이는 데이터베이스 복원 시 Umbraco 콘텐츠 관리 시스템에서 알려진 문제입니다.
위 중 어느 것도 나에게 통하지 않았다.데이터베이스에서 Activity Monitor 또는 sp_who를 사용하여 활성 연결을 표시하지 않았습니다.나는 결국 다음을 해야 했다.
- 데이터베이스 노드를 오른쪽 클릭합니다.
- "Detach..."를 선택합니다.."
- [접속 드롭(Drop Connections)]박스를 켜겠습니다
- 재접속
가장 우아한 솔루션은 아니지만 작동하며 SQL Server를 재시작할 필요가 없습니다(DB 서버가 많은 다른 데이터베이스를 호스트했기 때문에 옵션도 아닙니다).
저는 이렇게 하는 게 더 좋지만
데이터베이스 세트를 오프라인으로 변경(롤백 즉시 사용)
데이터베이스를 복원합니다.그 후에
롤백을 통해 데이터베이스 세트를 온라인으로 즉시 변경
언급URL : https://stackoverflow.com/questions/1154200/when-restoring-a-backup-how-do-i-disconnect-all-active-connections
'programing' 카테고리의 다른 글
SQL Server Profiler에서 "exec sp_reset_connection"은 무엇을 의미합니까? (0) | 2023.04.07 |
---|---|
Microsoft SQL Server 로그인 오류: 18456 (0) | 2023.04.07 |
다음을 포함하는 저장 프로시저를 찾으려면 어떻게 해야 합니까? (0) | 2023.04.07 |
SQL Server의 기존 테이블에 기본값 열 추가 (0) | 2023.04.07 |
데이터베이스에 보기를 작성하는 이유는 무엇입니까? (0) | 2023.04.07 |