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

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

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted] 

但是在排除时显示错误:

消息5030,级别16,状态2,行1
数据库不能独占locking来执行操作。

我的查询有什么不对吗?

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

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. 尝试重命名数据库:

     ALTER DATABASE dbName MODIFY NAME = NewName 
  3. 将数据库设置为多用户模式:

     ALTER DATABASE NewName SET MULTI_USER WITH ROLLBACK IMMEDIATE 

尝试先closures与数据库的所有连接:

 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 

从这里采取

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

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

此链接可能会帮助您解决问题: http : //msdn.microsoft.com/en-IN/library/ms345378(v=sql.105).aspx以及此链接: http : //msdn.microsoft.com /en-us/library/ms345378.aspx

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

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

即使在转换到单用户模式后closures连接尝试:

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

查看结果并查看与有问题的数据库的连接的ID。

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

KILL connection_ID

用第一个查询结果中的IDreplaceconnection_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 

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

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE

重命名数据库

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE SET MULIUSER模式

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER WITH ROLLBACK IMMEDIATE

 use master ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted' ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER 

closures所有连接的另一种方法是:

pipe理工具>查看本地服务

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