196

我正在使用此查询重命名数据库:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

但是执行时会报错:

消息 5030,级别 16,状态 2,第 1 行
无法以独占方式锁定数据库以执行操作。

我的查询有什么问题吗?

4

11 回答 11

382

您可以尝试将数据库设置为单用户模式。

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
于 2013-05-22T07:02:58.143 回答
70
  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
    
于 2014-06-12T06:00:03.057 回答
49

SQL Server Management Studio (SSMS)中:

您还可以在对象资源管理器中右键单击您的数据库并转到Properties。从那里,转到选项。一直向下滚动并将Restrict Access设置为SINGLE_USER。更改您的数据库名称,然后返回并将其设置回MULTI_USER

于 2015-04-14T17:33:40.397 回答
22

首先尝试关闭与数据库的所有连接:

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

取自这里

于 2013-05-22T06:59:33.697 回答
6

这为我做到了:

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
于 2015-02-17T15:29:30.480 回答
5

那是因为其他人正在访问数据库。将数据库置于单用户模式,然后重命名。

此链接可能会有所帮助: http:
//msdn.microsoft.com/en-IN/library/ms345378 (v=sql.105).aspx

还有:http:
//msdn.microsoft.com/en-us/library/ms345378.aspx

于 2013-05-22T06:57:46.750 回答
4

1.database设置1st单用户模式

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE

2.重命名数据库

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE设置多用户模式

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER WITH ROLLBACK IMMEDIATE

于 2017-03-01T23:12:21.647 回答
3

将数据库更改为单用户模式,如其他答案所示

有时,即使在转换为单用户模式之后,允许到数据库的唯一连接也可能正在使用中。

即使在转换为单用户模式后也要关闭连接,请尝试:

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

查看结果并查看到相关数据库的连接 ID。

然后使用下面的命令关闭这个连接(应该只有一个,因为数据库现在处于单用户模式)

杀死连接_ID

将 connection_id 替换为第一个查询结果中的 ID

于 2014-10-05T01:31:58.353 回答
0

关闭所有连接的另一种方法:

管理工具 > 查看本地服务

停止/启动“SQL Server (MSSQLSERVER)”服务

于 2017-02-14T19:45:47.867 回答
0

对我来说,我无法重命名数据库的原因是因为存在活动连接。我只是先使数据库脱机,勾选 Drop All Active Connections。然后再次上线,我已经可以重命名数据库了。 脱机

在此处输入图像描述

于 2022-01-28T05:07:56.557 回答
-2
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER
于 2017-01-30T08:59:36.490 回答