重命名数据库并在显示数据库中以旧名称创建数据库已存在错误

时间:2013-05-23 07:01:32

标签: c# sql sql-server-2008-r2

我正在重命名我的数据库并使用show database中的旧名称创建数据库已存在错误。

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,Level 16,State 1,Line 1
  无法创建文件'C:\ Program Files \ Microsoft SQL   Server \ MSSQL10_50.EASYDIRECT \ MSSQL \ DATA \ DATABASE1.mdf'因为它   已经存在。更改文件路径或文件名,然后重试   操作。
  消息1802,级别16,状态4,行1   CREATE DATABASE失败。无法创建列出的某些文件名。检查相关错误。

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

2 个答案:

答案 0 :(得分:5)

您的ALTER DATABASE ....仅重命名逻辑数据库名称 - 但物理文件仍然存在旧名称(database1.mdf和{{ 1}})。因此,您也需要重命名物理文件,或者您需要使用不同的文件名创建数据库。

所以试试这个:

database1.ldf

现在像以前一样重命名数据库 - 再次运行命令。现在你应该看到select * from sys.databases where name like 'Database1%' 的条目,对吗?

现在运行此命令:

Database1_Deleted

我打赌你现在看到两个条目 - 一个用于select * from sys.database_files where name like 'Database1%' 而另一个用于Database1_Deleted - 但两者仍然分别引用Database1_Deleted_logDatabase1.mdf - 正确吗?

因此,要解决此问题,您需要重命名物理文件

Database1.ldf

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

答案 1 :(得分:1)

虽然您已在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中的文件并将数据库重新联机。

以下是一个示例:Move SQL Server 2008 database files to a new folder location