重命名数据库并使用旧名称创建数据库,显示数据库已经存在的错误信息。

3
我正在重命名我的数据库,并使用旧名称创建数据库,显示数据库已经存在错误。
use master 

ALTER DATABASE DATABASE1 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE DATABASE1 
MODIFY NAME = [DATABASE1_DELETED] 

ALTER DATABASE DATABASE1_DELETED 
SET MULTI_USER

现在查询已经正确执行并重命名了数据库,但我仍然想用旧名称创建数据库,像这样:

IF DB_ID('DATABASE1') IS NULL 
   CREATE DATABASE [DATABASE1] 

现在显示错误信息:
Msg 5170,级别16,状态1,行1
无法创建文件“C:\Program Files\Microsoft SQL Server\MSSQL10_50.EASYDIRECT\MSSQL\DATA\DATABASE1.mdf”,因为它已经存在。更改文件路径或文件名,然后重试操作。
Msg 1802,级别16,状态4,行1
创建数据库失败。列出的一些文件名无法创建。检查相关错误。
如何使用旧名称创建数据库?

4
你的 ALTER DATABASE... 只会重命名逻辑数据库名称,而物理文件仍然使用旧名称(database1.mdfdatabase1.ldf)。因此,你需要重命名 物理文件 或使用不同的文件名创建数据库。 - marc_s
1
@marc_s 是正确的,那就是问题所在。 - cheedep
1
@marc_s:链接的问题提供了有用的额外信息,但它绝对不是重复的。 - DevSolar
2个回答

6

您的ALTER DATABASE ....只是重命名了逻辑数据库名称,但物理文件仍然存在旧名称(database1.mdfdatabase1.ldf)。因此,您需要重命名物理文件或使用不同的文件名创建数据库。

请尝试以下方法:

select * from sys.databases where name like 'Database1%'

现在像之前一样将你的数据库重命名 - 再次运行该命令。现在你应该会看到一个Database1_Deleted的条目,对吗?

现在运行这个命令:

select * from sys.database_files where name like 'Database1%'

我打赌你现在看到了两个条目 - 一个是Database1_Deleted,另一个是Database1_Deleted_log - 但两者仍然分别引用Database1.mdfDatabase1.ldf - 正确吗?
因此,为了解决这个问题,您需要同时重命名物理文件:
ALTER DATABASE Database1
MODIFY FILE (NAME = Database1_Deleted, 
             FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EASYDIRECT\MSSQL\DATA\Database1_Deleted.mdf')
GO

ALTER DATABASE Database1
MODIFY FILE (NAME = Database1_Deleted_log, 
             FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EASYDIRECT\MSSQL\DATA\Database1_Deleted_Log.ldf')
GO

您可能需要根据自己的数据库名称和物理文件位置进行调整,但您应该能够理解这个想法-对吧?

是的,我有一个想法,谢谢Marc。 - Vikram Bose

2

虽然你已经在SQL中重命名了旧数据库,但是该数据库在硬盘上的物理位置并没有改变。当你尝试创建新的DB而没有指定文件名时,它将尝试在默认路径上创建,并使用默认文件名 - 这就是旧数据库所在的位置。

你可以用两种方法解决这个问题。

要么创建具有不同文件名的新数据库:

USE master
GO
CREATE DATABASE DATABASE1
ON 
( NAME = DATABASE1_DATA,
   FILENAME = 'c:\Your_Location\Your_Folders\new_database1.mdf' ) --or any name you choose other then database1.mdf
GO

另一个选择是重命名旧数据库文件。这需要将数据库脱机,设置新的文件路径,在Windows中手动重命名文件并将数据库上线。

以下是其中的一个示例:将SQL Server 2008数据库文件移动到新文件夹位置


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