在SQL Server 2008 R2中重命名数据库时出错

我使用这个查询重命名数据库:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

但它在执行时显示一个错误:

Msg 5030,级别16,状态2,行1

.数据库不能被排他锁定以执行该操作

我的查询有什么问题吗?

162038 次浏览

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

这个链接可能有帮助:
http://msdn.microsoft.com/en-IN/library/ms345378 (v = sql.105) . aspx < / p > < p >也:< br > http://msdn.microsoft.com/en-us/library/ms345378.aspx < / p >

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

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

取自在这里

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

https://stackoverflow.com/a/11624/2408095 < a href = " 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. 将数据库设置为单一模式:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
  2. Try to rename the database:

    ALTER DATABASE dbName MODIFY NAME = NewName
    
  3. Set the database to Multiuser mode:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE
    

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

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

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

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

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

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

杀死connection_ID

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

这对我来说很管用:

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

SQL Server Management Studio (SSMS):

你也可以在对象资源管理器中右键单击你的数据库并转到属性。从那里,转到选项。向下滚动并将限制访问设置为SINGLE_USER。更改数据库名称,然后返回并将其设置为MULTI_USER

use master


ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE


exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'


ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

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

管理工具>查看本地服务

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

1.数据库设置第一个单用户模式

__abc0 bosevikram __abc1

2.重命名数据库

修改数据库 BOSEVIKRAM 修改名称= [BOSEVIKRAM_Deleted]

3.数据库设置多用户模式

修改数据库 bosevikram_delete

对我来说,我不能重命名数据库的原因是因为有活动连接。 我只是先使数据库脱机,然后勾选“删除所有活动连接”。 然后再次联机,我就可以重命名数据库了。 Take Offline < / p >

enter image description here