programing

백업을 복원할 때 모든 활성 연결을 끊으려면 어떻게 해야 합니까?

codeshow 2023. 4. 7. 21:45
반응형

백업을 복원할 때 모든 활성 연결을 끊으려면 어떻게 해야 합니까?

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을 통한 순서입니다.

  1. 개체 탐색기에서 서버를 마우스 오른쪽 버튼으로 클릭하고 '활동 모니터'를 선택합니다.
  2. 이 창이 열리면 프로세스 그룹을 확장합니다.
  3. 이제 드롭다운을 사용하여 데이터베이스 이름으로 결과를 필터링합니다.
  4. 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

반응형