활성 연결로 인해 SQL Server 2005가 백업을 복원하지 않습니다. 어떻게 강제 할 수 있습니까?
답변
SQL Server Management Studio 2005
당신이 바로 데이터베이스를 클릭 클릭하면 Tasks
다음을 클릭 Detach Database
, 그것은 활성 연결이있는 대화 상자가 나타납니다.
“메시지”아래의 하이퍼 링크를 클릭하면 활성 연결을 종료 할 수 있습니다.
그런 다음 데이터베이스를 분리하지 않고 해당 연결을 종료 할 수 있습니다.
SQL Server Management Studio 2008
SQL Server Management Studio 2008의 인터페이스가 변경되었습니다. 단계는 다음과 같습니다 ( Tim Leung 사용 ).
- 개체 탐색기에서 서버를 마우스 오른쪽 단추로 클릭하고 ‘활동 모니터’를 선택하십시오.
- 이것이 열리면 프로세스 그룹을 펼치십시오.
- 이제 드롭 다운을 사용하여 데이터베이스 이름별로 결과를 필터링하십시오.
- 마우스 오른쪽 단추로 ‘Kill Process’옵션을 선택하여 서버 연결을 종료하십시오.
답변
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
답변
이 코드는 저에게 효과적이며 데이터베이스의 기존 연결을 모두 종료합니다. 데이터베이스 이름을 갖도록 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를 다시 시작하면 사용자 연결이 끊어집니다. 내가 찾은 가장 쉬운 방법-서버를 오프라인으로 전환하려는 경우에도 좋습니다.
그러나 매우 까다로운 이유로 ‘Take Offline (오프라인으로 가져 오기)’옵션을 사용하면이 작업을 안정적으로 수행 할 수 없으며 관리 콘솔이 중단되거나 혼동 될 수 있습니다. 다시 시작한 후 오프라인 작업 수행
예를 들어 연결의 소스 인 웹 서버를 중지 한 경우 옵션입니다.
답변
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를 다시 시작하면 (마우스 오른쪽 버튼을 클릭하고 다시 시작을 선택하면) 가능합니다.