我正在使用此查询重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
但是执行时会报错:
消息 5030,级别 16,状态 2,第 1 行
无法以独占方式锁定数据库以执行操作。
我的查询有什么问题吗?
我正在使用此查询重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
但是执行时会报错:
消息 5030,级别 16,状态 2,第 1 行
无法以独占方式锁定数据库以执行操作。
我的查询有什么问题吗?
您可以尝试将数据库设置为单用户模式。
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
将数据库设置为单一模式:
ALTER DATABASE dbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
尝试重命名数据库:
ALTER DATABASE dbName MODIFY NAME = NewName
将数据库设置为多用户模式:
ALTER DATABASE NewName
SET MULTI_USER WITH ROLLBACK IMMEDIATE
在SQL Server Management Studio (SSMS)中:
您还可以在对象资源管理器中右键单击您的数据库并转到Properties。从那里,转到选项。一直向下滚动并将Restrict Access设置为SINGLE_USER。更改您的数据库名称,然后返回并将其设置回MULTI_USER。
首先尝试关闭与数据库的所有连接:
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
取自这里
这为我做到了:
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
那是因为其他人正在访问数据库。将数据库置于单用户模式,然后重命名。
此链接可能会有所帮助: http:
//msdn.microsoft.com/en-IN/library/ms345378 (v=sql.105).aspx
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
将数据库更改为单用户模式,如其他答案所示
有时,即使在转换为单用户模式之后,允许到数据库的唯一连接也可能正在使用中。
即使在转换为单用户模式后也要关闭连接,请尝试:
select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
and dbid = DB_ID('BOSEVIKRAM')
查看结果并查看到相关数据库的连接 ID。
然后使用下面的命令关闭这个连接(应该只有一个,因为数据库现在处于单用户模式)
杀死连接_ID
将 connection_id 替换为第一个查询结果中的 ID
关闭所有连接的另一种方法:
管理工具 > 查看本地服务
停止/启动“SQL Server (MSSQLSERVER)”服务
use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE
exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER