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

Vik*_*ose 152 sql sql-server sql-server-2008-r2

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

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
Run Code Online (Sandbox Code Playgroud)

但它在排除时显示错误:

消息5030,级别16,状态2,行1
无法独占锁定数据库以执行操作.

我的查询有什么问题吗?

小智 306

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

/sf/answers/813711/

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
Run Code Online (Sandbox Code Playgroud)

  • 是否需要“立即回滚”。如果我根本不使用它,会导致问题吗? (2认同)
  • 虽然有点晚了,但要回答这个问题:是的,在更改其他用户可能正在操作的数据库时,您应该使用“WITH ROLLBACK IMMEDIATE”,以确保这些操作的完整性。但是,当再次将数据库设置回 MULTI_USER 模式时,实际上没有必要,因为数据库已经处于 SINGLE_USER 模式,而且您是唯一能够运行任何事务的用户。 (2认同)

Sam*_*hdi 53

  1. 将数据库设置为单一模式:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
    Run Code Online (Sandbox Code Playgroud)
  2. 尝试重命名数据库:

    ALTER DATABASE dbName MODIFY NAME = NewName
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将数据库设置为多用户模式:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE
    
    Run Code Online (Sandbox Code Playgroud)


小智 23

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

  • 快捷方便! (2认同)

And*_*eev 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
Run Code Online (Sandbox Code Playgroud)

取自这里


Dhw*_*ani 5

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

此链接可能有帮助:
http://msdn.microsoft.com/en-IN/library/ms345378 (v=sql.105).aspx

还有:
http ://msdn.microsoft.com/en-us/library/ms345378.aspx


t_p*_*lus 5

这为我做到了:

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
Run Code Online (Sandbox Code Playgroud)


小智 5

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

更改数据库BOSEVIKRAM设置 SINGLE_USER 并立即回滚

2.重命名数据库

更改数据库BOSEVIKRAM修改名称 = [BOSEVIKRAM_Deleted]

3.数据库设置多用户模式

更改数据库BOSEVIKRAM_Deleted设置 MULTI_USER 立即回滚