我正在使用以下查询来重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
但是执行时出现错误:
Msg 5030,Level 16,State 2,Line 1
数据库无法被独占锁定以执行该操作。
我的查询有什么问题吗?
我正在使用以下查询来重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
但是执行时出现错误:
Msg 5030,Level 16,State 2,Line 1
数据库无法被独占锁定以执行该操作。
我的查询有什么问题吗?
你可以尝试将数据库设置为单用户模式。
https://dev59.com/CnVD5IYBdhLWcg3wWKLc#11624
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
WITH ROLLBACK IMMEDIATE
是否必要?如果我根本不使用它,会引起问题吗? - user13892WITH ROLLBACK IMMEDIATE
来确保这些操作的完整性。但是当将数据库重新设置为MULTI_USER模式时,这并不是真正必要的,因为数据库已经处于SINGLE_USER模式,而且只有您能运行任何事务。 - Hakan Yildizhan将数据库设置为单用户模式:
ALTER DATABASE dbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
尝试重命名数据库:
ALTER DATABASE dbName MODIFY NAME = NewName
将数据库设置为多用户模式:
ALTER DATABASE NewName
SET MULTI_USER WITH ROLLBACK IMMEDIATE
WITH ROLLBACK IMMEDIATE
吗? - BendEg首先尝试关闭所有与数据库的连接:
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
1.将数据库设置为单用户模式
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE
2.重命名数据库
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
3.将数据库设置为多用户模式
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。
然后使用以下命令关闭此连接(因为数据库现在处于单用户模式,所以应该只有一个连接)
KILL 连接_ID
将connection_id替换为第一次查询结果中的ID。
关闭所有连接的另一种方法:
管理工具 > 查看本地服务
停止/启动 "SQL Server (MSSQLSERVER)" 服务