在SQL Server Management Studio 2014中重命名数据库名称

45

我有一个名为"ip_ent_site"的数据库。我想将其重命名为"ip_ent_site1",例如。

这里输入图片描述

我已经右键重命名了,但是一直失败。

这是错误信息:

这里输入图片描述

有人能帮忙吗?


@JasonClark - 我认为你的链接链接回了这个页面... - Brett Rigby
11个回答

50

那是因为有未完成的事务。如果这些事务可以被终止,那么可以使用这个 SQL 轻松地完成。

ALTER DATABASE ip_ent_site
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
sp_rename 'ip_ent_site', 'new_db_name' ,'DATABASE';
GO
ALTER DATABASE new_db_name
SET MULTI_USER
GO

1
你能解释一下每个语句都做了什么吗?我很好奇,提前感谢。 - Kaushik Thanki
第一条语句将数据库设置为单用户模式,并关闭所有打开的连接并回滚所有打开的事务。第二条语句重命名数据库。最后一条语句打开已更名的数据库以供用户连接。 - Raj
6
点踩没问题。但是能否解释一下为什么要点踩,这样我们所有人都可以学到新的东西呢? - Raj
1
当我这样重命名时,我的DB.mdf文件没有被重命名,并且创建另一个同名数据库时出现了问题。 - carraua

24

在重命名之前,将数据库设置为单用户模式MSDN

USE master;
GO
ALTER DATABASE ip_ent_site
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;

然后将其重命名

USE master
GO
ALTER DATABASE ip_ent_site
Modify Name = ip_ent_site1
GO

然后将其放回多用户模式

ALTER DATABASE ip_ent_site1
SET MULTI_USER;

1
如果您暂时将数据库设置为single_user,则无需将其设置为只读。另外,您没有编写脚本将其从只读状态中移除! - ErikE
你是对的 @ErikE。我编辑了答案。很好地发现了问题。 - sqluser

13

原因是因为在重命名数据库时,数据库必须防止任何其他连接/事务对其进行访问。

获取数据库锁的简单脚本:

ALTER DATABASE [ip_ent_site] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE [ip_ent_site] MODIFY NAME = [ip_ent_site_new]
GO

ALTER DATABASE [ip_ent_site_new] SET MULTI_USER;    
GO

我一直在使用这个查询来重命名数据库,不确定为什么答案没有用。 - Ranbeer M
这是有效的SQL并且可以完成任务,除了第三个语句需要使用新名称。不知道谁投了反对票以及为什么。 - Raj

5
为了启用重命名数据库的右键功能:
1. 关闭所有查询窗口 2. 右键单击并重命名数据库

1
离线数据库
USE [master];
GO
--Disconnect all existing session.
ALTER DATABASE Datatbase_Name SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

--将数据库设置为OFFLINE模式。 ALTER DATABASE 数据库名称 SET OFFLINE 要重命名物理数据库文件,请使用打开SQL Server Management Studio文件夹或使用以下脚本

--允许更改高级选项。

EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

重命名 MDF 文件和 Log。
ALTER DATABASE [Datatbase_Name] MODIFY FILE (Name='Old_Mdf_file_Name', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL13.SQLMS2016\MSSQL\DATA\New_Mdf_file_Name.mdf')
ALTER DATABASE [Datatbase_Name] MODIFY FILE (Name='Old_log_file_Name', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL13.SQLMS2016\MSSQL\DATA\New_log_file_Name.ldf')

EXEC xp_cmdshell 'RENAME "C:\Program Files\Microsoft SQL Server\MSSQL13.SQLMS2016\MSSQL\DATA\Old_Mdf_file_Name.mdf", "New_Mdf_file_Name.mdf"'
GO

EXEC xp_cmdshell 'RENAME "C:\Program Files\Microsoft SQL Server\MSSQL13.SQLMS2016\MSSQL\DATA\Old_log_file_Name.ldf", "New_log_file_Name.ldf"'
GO
ONLINE DATABASE

ALTER DATABASE [Datatbase_Name] SET ONLINE
Go
ALTER DATABASE [Datatbase_Name] SET MULTI_USER
Go

1

这是重命名数据库名称的最简单方法。在运行此命令之前,请确保您已关闭所有查询窗口。

EXEC sp_renamedb 'old_Name', 'new_Name'


1
不错的一行代码,但是:此功能将在未来版本的Microsoft SQL Server中被删除。避免在新开发工作中使用此功能,并计划修改当前使用此功能的应用程序。请改用ALTER DATABASE MODIFY NAME。 - msysmilu

1
"我們應該也修改'邏輯文件名'嗎?" ALTER DATABASE [testdb] MODIFY FILE (NAME=N'testdbold ', NEWNAME=N'testdb') GO ALTER DATABASE [testdb] MODIFY FILE (NAME=N'testdbold', NEWNAME=N'testdb_log') GO

1

执行以下查询

USE master;
GO
sp_renamedb @dbname = 'old_name' , @newname = 'new_name'


0
执行系统存储过程sp_who2以查找正在使用数据库的会话,然后使用kill命令关闭应用程序或终止会话。

0

使用查询重命名SQL数据库名称

use [master] go

Alter Database Old_database_name Modify name = New_database_name

或者

sp_renameDB 'old_dbname' , 'new_dbname'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接