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


21

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

无法覆盖文件“ C:\ SQL Directory \ DATA \ A.mdf”。数据库“ A”正在使用它。

但是,如果我从SQL Server删除A,重做就可以了。

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

谢谢〜

Answers:


19

如果还原数据库,则默认情况下,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

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


11

WITH MOVE/ MOVE是的正确解决方案T-SQL

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

  • 中密度纤维板
  • NDF
  • 低密度脂蛋白

  • b.MDF
  • b.NDF
  • LDF

在此处输入图片说明


1
另外,在“常规”选项卡中更改目标数据库名称时,GUI会相应地自动更新“还原为”名称。
Wouter

0

还原备份时,可以指定要还原的数据文件。

这里这里。您可以使用“将数据库文件另存为”选项和“覆盖现有数据库”标志。


0

您是在TSQL命令中还是在选中复选框中使用REPLACE选项?或者,您可以重命名文件,并以其他方式调用数据库。

您还将发现在正在使用的数据库上进行恢复有些困难。.....您将需要终止使用该数据库的进程。或者先删除/删除数据库,然后关闭连接(这可能是最简单的);或将要覆盖的数据库设置为具有立即回滚的受限用户模式(例如受限用户模式),以便希望只有DBA可以使用;甚至停止SQL Server,然后重新启动它-希望在任何人使用该数据库之前使还原滚动进行。

PS会备份您将要覆盖的数据库,以防万一。


0

如果已经使用该Options页面并激活Overwrite the existing database (WITH REPLACE)选项后有人在Management Studio的GUI中搜索解决方案:

只需单击Restore As列,然后更改文件名*.mdf*.ldf文件名即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.