我正在使用此查询来重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
但是执行时显示错误:
消息5030,级别16,状态2,行1
无法完全锁定数据库才能执行该操作。
我的查询有问题吗?
我正在使用此查询来重命名数据库:
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
但是执行时显示错误:
消息5030,级别16,状态2,行1
无法完全锁定数据库才能执行该操作。
我的查询有问题吗?
Answers:
您可以尝试将数据库设置为单用户模式。
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
WITH ROLLBACK IMMEDIATE
必要的。如果我根本不使用它,会引起问题吗?
WITH ROLLBACK IMMEDIATE
在更改其他用户可能在其上运行的数据库的同时使用,以确保这些操作的完整性。但是,再次将数据库重新设置为MULTI_USER模式时,这并不是真正必要的,因为该数据库已经处于SINGLE_USER模式,并且您是唯一能够运行任何事务的用户。
在SQL Server Management Studio(SSMS)中:
您也可以在 对象资源管理器中然后转到“ 属性”。从那里转到选项。一直向下滚动,然后将“ 限制访问”设置为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/zh-CN/library/ms345378(v=sql.105).aspx
将数据库更改为单用户模式,如其他答案所示
有时,即使转换为单用户模式后,也可能正在使用到数据库的唯一连接。
即使在转换为单用户模式后也要关闭连接,请尝试:
select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
and dbid = DB_ID('BOSEVIKRAM')
查看结果,并查看与该数据库的连接的ID。
然后使用下面的命令关闭此连接(由于数据库现在处于单用户模式,因此只能建立一个连接)
杀死connection_ID
用第一个查询结果中的ID替换connection_id
use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE
exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER