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] 

现在它显示一个错误:

消息 5170,级别 16,状态 1,第 1 行
无法创建文件 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EASYDIRECT\MSSQL\DATA\DATABASE1.mdf',因为它已经存在。更改文件路径或文件名,然后重试该操作。
消息 1802,级别 16,状态 4,第 1 行
创建数据库失败。无法创建列出的某些文件名。检查相关错误。

如何使用旧名称创建数据库?

4

2 回答 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%'

我敢打赌你现在看到两个条目 - 一个 forDatabase1_Deleted和另一个 for 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

您可能需要根据自己的数据库名称和物理文件位置进行调整 - 但您应该明白这一点 - 对吧?

于 2013-05-23T07:18:40.987 回答
2

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

您可以通过两种方式解决它。

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

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

或其他选项,重命名旧数据库的文件。这需要使 Db 脱机,设置新的文件路径,在 windows 中手动重命名文件并将 DB 重新联机。

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

于 2013-05-23T07:20:39.433 回答