使用WITH REPLACE还原备份时出现错误3154


16

我的计算机上安装了SQL 2012 SP1。我备份了一个数据库test.bak

我有一个名称test2相同的数据库,但是数据已更改。

我想test.bak通过test2数据库还原。

我总是收到错误:

错误3154:备份集保存现有数据库以外的数据库的备份。

我试过了:

  1. 我右击 test2 -> Restore database -> From device

    我选择test.bak并检查了With Replace但出现错误。

  2. 然后我尝试右键单击 test2 -> Restore file and filegroups

    我选择test.bak并检查了With Replace但出现错误。

我可以删除旧数据库,然后使用正确的名称还原备份,但是当我使用SQL 2008时,在现有数据库上进行还原没有问题。

似乎因为我使用SQL2012,所以我经常收到此错误!

Answers:


12

您应该使用WITH REPLACE并且通常避免在Management Studio中使用单击鼠标,因为它们不灵活并且经常存在错误。

这为我工作:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

另外,还应确保在备份数据库时使用WITH INIT和/或不要将设备指向已经包含备份的文件(因为它可能与您现在正在备份的数据库不同,尤其是在重用诸如test...)。


@AaronBertrand fyi,该功能确实存在。我通常要做的是使用UI并将其编写为脚本,以确保一切正常。这里很多的bug的,是的。
usr 2015年

2

1)WITH REPLACE在使用RESTORE命令时使用。

2)DROP较旧的数据库发生冲突,并使用RESTORE命令再次还原。

SQL Server版本没有问题。正如Aaron所指出的,我还能够从2008年到2012年还原数据库以及相同的版本。


2

您正在还原错误的数据库。不要将其视为“ test2从中还原备份test”,而应考虑“还原我的备份,test但将其重命名为test2”。您可以从中选择还原任务,test然后将其放入test2“到数据库:”字段中。

正如亚伦(Aaron)所提到的,学习脚本而不是依赖向导-弄清楚发生了什么。


2

您仍然可以执行此操作,但这需要额外的步骤。

打开还原对话框,根据2008年的习惯进行常规选择。如果原始数据库是DB,则选择DB.bak设备作为Source,并将Destination名称更改为DBTest。然后在“选择页面”(左上角)下,您会看到“常规” /“文件” /“选项”-选择“文件”。在网格中看。您将看到“原始文件名”和“恢复为文件名”列。手动加宽后者并输入新名称(如果数据库的原始名称是DB,并且您要创建DBTest,则将.... \ DB.mdf更改为... \ DBTest.mdf,等等。)

这将接受DB的.bak文件作为源,将DBTest作为目标。您可能还需要转到“选项”页面,然后选择“替换为”。由于其他原因,我需要这样做,因此如果没有此选项,我将无法对其进行测试。


2

指出的正确答案是使用该WITH REPLACE选项。

我只想指出WITH REPLACE,如果您尝试从差异备份(没有完整备份)中进行还原,即使使用,也可能会出现问题。


在回答此问题时,我可能没有足够的意见要发表,我只是想指出,如果您尝试从差异备份(没有完整的备份)中进行还原,即使使用“ WITH REPLACE”,也会出现错误
Brimstedt 2015年

0

希望这会起作用。

  1. 一旦设置了还原文件的路径。
  2. 点击左侧的“选项”。
  3. 选中复选框-“关闭与目标数据库的现有连接”。
  4. 单击确定。 在此处输入图片说明

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.