我正在重命名我的数据库并使用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失败。无法创建列出的某些文件名。检查相关错误。
如何使用旧名称创建数据库?
答案 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_log
和Database1.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