2013-05-22 66 views
112

Tôi đang sử dụng truy vấn này để đổi tên cơ sở dữ liệu:Lỗi trên đổi tên cơ sở dữ liệu trong SQL Server 2008 R2

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted] 

Nhưng nó hiển thị lỗi khi excuting:

Msg 5030, Level 16, State 2, Line 1
Cơ sở dữ liệu không thể bị khóa độc quyền để thực hiện thao tác.

Có vấn đề gì với truy vấn của tôi không?

+4

Không có gì sai với truy vấn - lỗi cho bạn biết rằng các kết nối khác được kết nối với cơ sở dữ liệu, do đó bạn không được phép đổi tên nó vào lúc này. –

+1

Nếu bạn đang thực hiện việc này từ SSMS, hãy đảm bảo bạn không có cửa sổ truy vấn mở đối với db đó, vì đó là kết nối riêng biệt đặt khóa trên db. – jleach

Trả lời

231

Bạn có thể thử đặt cơ sở dữ liệu thành người dùng đơn lẻ mo de.

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 
17

Cố gắng để đóng tất cả các kết nối đến cơ sở dữ liệu của bạn đầu tiên:

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 

Taken từ here

35
  1. Đặt cơ sở dữ liệu sang chế độ duy nhất:

    ALTER DATABASE dbName 
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
    
  2. Cố gắng đổi tên cơ sở dữ liệu:

    ALTER DATABASE dbName MODIFY NAME = NewName 
    
  3. Đặt cơ sở dữ liệu sang chế độ nhiều người dùng:

    ALTER DATABASE NewName 
    SET MULTI_USER WITH ROLLBACK IMMEDIATE 
    
+0

mã hữu ích, nhờ –

+0

@SamieyMehdi Tôi có nên sử dụng 'WITH ROLLBACk IMMEDIATE' cho nhiều người dùng không? – BendEg

3

Thay đổi cơ sở dữ liệu để chế độ người dùng đơn lẻ như trong các câu trả lời khác

Đôi khi, ngay cả sau khi chuyển đổi sang chế độ người dùng đơn lẻ, kết nối chỉ được phép vào cơ sở dữ liệu có thể bằng sử dụng.

Để đóng một kết nối ngay cả sau khi chuyển đổi sang đơn chế độ người dùng thử:

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

Nhìn vào kết quả và xem ID của kết nối cơ sở dữ liệu trong câu hỏi.

Sau đó sử dụng lệnh dưới đây để đóng kết nối này (chỉ nên là một kể từ khi cơ sở dữ liệu hiện đang ở chế độ người dùng đơn)

KILL CONNECTION_ID

Thay CONNECTION_ID với ID trong kết quả của truy vấn 1st

2

này đã làm nó cho tôi:

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 
13

Bạn cũng có thể nhấp chuột phải vào cơ sở dữ liệu của mình trong Object Explorer và vào Properties. Từ đó chuyển đến Tùy chọn. Cuộn xuống hết cỡ và đặt Giới hạn quyền truy cập thành SINGLE_USER. Thay đổi tên cơ sở dữ liệu của bạn, sau đó quay trở lại và đặt nó trở lại MULTI_USER.

+0

Nhanh chóng và dễ dàng! – user1336087

0
use master 

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted' 

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER 
0

Một cách khác để đóng tất cả các kết nối:

Administrative Tools> Xem Dịch Vụ Địa Phương

Stop/Start "SQL Server (MSSQLSERVER)" dịch vụ

1

1.database thiết 1st single chế độ người dùng

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK NGAY

2.RENAME THE DATABASE

ALTER DATABASE BOSEVIKRAM sửa đổi tên = [BOSEVIKRAM_Deleted]

3.DATABAE SET MULIUSER THỨC

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER VỚI ROLLBACK IMMEDIATE

Các vấn đề liên quan