SQL Server 2008 R2에서 데이터베이스 이름 변경시 오류


164

이 쿼리를 사용하여 데이터베이스의 이름을 바꾸고 있습니다.

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

그러나 실행시 오류가 표시됩니다.

메시지 5030, 수준 16, 상태 2, 줄 1
데이터베이스를 작업을 수행하기 위해 독점적으로 잠글 수 없습니다.

내 질문에 문제가 있습니까?


4
쿼리에는 아무런 문제가 없습니다. 오류는 다른 연결이 데이터베이스에 연결되어 있음을 알려주므로 현재 이름을 바꿀 수 없습니다.
Damien_The_Unbeliever

1
SSMS에서이 작업을 수행하는 경우 해당 데이터베이스에 대해 잠금을 설정하는 별도의 연결이므로 해당 데이터베이스에 대해 쿼리 창이 열려 있지 않은지 확인하십시오.
jleach

답변:


329

데이터베이스를 단일 사용자 모드로 설정해 볼 수 있습니다.

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

1
입니다 WITH ROLLBACK IMMEDIATE필요. 전혀 사용하지 않으면 문제가 발생합니까?
user13892

파티에 늦었지만이 질문에 답하려면 : 예, WITH ROLLBACK IMMEDIATE이러한 작업의 무결성을 보장하기 위해 다른 사용자가 작업중인 데이터베이스를 변경하는 동안 사용해야 합니다. 그러나 데이터베이스가 이미 SINGLE_USER 모드에 있고 트랜잭션을 실행할 수있는 유일한 사용자이므로 데이터베이스를 다시 MULTI_USER 모드로 다시 설정할 때는 실제로 필요하지 않습니다.
Hakan Yildizhan

61
  1. 데이터베이스를 단일 모드로 설정하십시오.

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  2. 데이터베이스 이름을 바꾸십시오.

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. 데이터베이스를 다중 사용자 모드로 설정하십시오.

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE

@SamieyMehdi WITH ROLLBACk IMMEDIATE멀티 유저에 사용해야합니까 ?
BendEg

29

에서 SQL Server 관리 Studio (SSMS) :

개체 탐색기 에서 데이터베이스를 마우스 오른쪽 단추로 클릭 하고 속성으로 이동할 수도 있습니다. 거기에서 옵션으로 이동하십시오 . 아래로 스크롤하여 액세스 제한SINGLE_USER로 설정 하십시오 . 데이터베이스 이름을 변경 한 다음 다시 들어가서 MULTI_USER로 설정하십시오 .


빠르고 쉬운!
ani627 년

저건 완벽 해. SQL Server 2017 작업
Adam Macierzyński

19

먼저 데이터베이스에 대한 모든 연결을 닫으십시오.

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

여기 에서 찍은


4

이것은 나를 위해 그것을했다 :

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO


2

다른 답변에 표시된 것처럼 데이터베이스를 단일 사용자 모드로 변경하십시오.

단일 사용자 모드로 변환 한 후에도 데이터베이스에 허용 된 유일한 연결이 사용 중일 수 있습니다.

단일 사용자 모드로 변환 한 후에도 연결을 닫으려면 다음을 시도하십시오.

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

결과를보고 해당 데이터베이스에 대한 연결 ID를보십시오.

그런 다음 아래 명령을 사용하여이 연결을 닫으십시오 (데이터베이스가 단일 사용자 모드에 있으므로 하나만 있어야 함).

KILL connection_ID

첫 번째 쿼리 결과에서 connection_id를 ID로 바꿉니다.


1

1. 데이터베이스 세트 첫 번째 단일 사용자 모드

롤백 즉시 ALTER DATABASE BOSEVIKRAM SET SINGLE_USER

2. 데이터베이스 이름 바꾸기

ALTER DATABASE BOSEVIKRAM 수정 이름 = [BOSEVIKRAM_ 삭제됨]

3. DATABAE SET MULIUSER 모드

ALTER DATABASE BOSEVIKRAM_ 롤백 즉시 설정된 MULTI_USER 설정


0

모든 연결을 닫는 또 다른 방법 :

관리 도구> 로컬 서비스보기

"SQL Server (MSSQLSERVER)"서비스 중지 / 시작


-1
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

이것은 Squid 's
reggaeguitar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.