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

时间:2013-05-22 06:53:46

标签: sql sql-server sql-server-2008-r2

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

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

但它在排除时显示错误:

  

Msg 5030,Level 16,State 2,Line 1
  无法独占锁定数据库以执行操作。

我的查询有问题吗?

10 个答案:

答案 0 :(得分:281)

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

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 :(得分:48)

  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
    

答案 2 :(得分:19)

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

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

取自here

答案 3 :(得分:18)

您还可以在对象资源管理器中右键单击数据库,然后转到“属性”。从那里转到选项。完全向下滚动并将Restrict Access设置为SINGLE_USER。更改您的数据库名称,然后返回并将其重新设置为MULTI_USER。

答案 4 :(得分:3)

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

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

答案 5 :(得分:3)

这对我有用:

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

答案 6 :(得分:2)

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

有时,即使转换为单用户模式,也可以使用允许进入数据库的唯一连接。

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

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

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

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

  

KILL connection_ID

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

答案 7 :(得分:1)

1.database设置第一单用户模式

ALTER DATABASE BOSEVIKRAM 设置SINGLE_USER并立即回滚

2.RENAME THE DATABASE

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE SET MULIUSER MODE

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER WITH ROLLBACK IMMEDIATE

答案 8 :(得分:0)

use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

答案 9 :(得分:0)

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

管理工具>查看本地服务

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