在 SQL Server 中还原数据库时无法覆盖 mdf 文件

smw*_*dia 24 sql sql-server

我有一个数据库 A。里面有一些数据。我为 A 创建了一个备份作为A.bak文件。然后,我创建了一个新的空数据库B.然后我尝试从恢复乙A.bak。但是 SQL Server 告诉我以下错误:

文件“C:\SQL Directory\DATA\A.mdf”不能被覆盖。它正被数据库“A”使用。

但是,如果我从 SQL Server 中删除 A,则恢复正常。

我不明白为什么 SQL 需要在从单独的备份文件恢复时写入原始数据库文件?

谢谢~

db2*_*db2 21

如果还原数据库,默认情况下 SQL Server 将尝试将所有数据和日志文件还原到其原始位置。由于原始数据库(“A”)仍在使用这些原始位置,因此还原失败。您需要使用 WITH MOVE 子句为数据库中的所有文件指定新位置。

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists
Run Code Online (Sandbox Code Playgroud)

反正就是这样。如有必要,请使用 RESTORE FILELISTONLY FROM DISK... 查看备份中的逻辑文件名。


Fra*_*ani 12

WITH MOVE/MOVET-SQL.

顺便说一句,如果您想使用 GUI,您可以转到文件并重命名:

  • 中密度纤维板
  • a.NDF
  • 一个.LDF

  • 中密度纤维板
  • b.NDF
  • b.LDF

在此处输入图片说明