如何在多用户模式下重命名数据库

Vik*_*ore 14 sql-server-2008 sql-server-2008-r2

我正在研究SQL SERVER 2008和2008 R2.如何在多用户模式下重命名数据库?我使用sp_rename但它返回此错误:

Msg 15225,Level 11,State 1,Procedure sp_rename,Line 338

Aar*_*and 33

您无法在数据库正在使用时重命名该数据库.要么等待维护窗口,要么强制数据库进入单用户模式(这将使每个人都出局):

USE [master];
GO
ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
--EXEC sys.sp_renamedb @dbname = N'foo', @newname = N'bar';
ALTER DATABASE foo MODIFY NAME = bar; -- preferred way
GO
ALTER DATABASE bar SET MULTI_USER;
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记`ALTER DATABASE栏SET MULTI_USER;` (6认同)
  • @VikrantMore您可能能够在多用户模式下重命名数据库,但*仅*如果没有任何用户连接到它.通过要求single_user访问来阻止重命名,而不是严格因为它所处的模式.如果您尝试重命名正在使用的数据库,则会收到错误消息5030. (2认同)

Mar*_*rtW 6

您不能使用sp_rename重命名数据库 - 有问题的sp将是sp_renamedb.但是,这在SQL Server的未来版本中将被删除,首选方法是:

ALTER DATABASE dbname MODIFY NAME = newdbname;
Run Code Online (Sandbox Code Playgroud)

但是如果没有对数据库的独占锁定,你无法做到这一点.