我的计算机上安装了带有 SP1 的 SQL 2012。我做了一个数据库的备份test.bak
。
我有一个名称test2
相同的数据库,但数据发生了变化。
我想test.bak
通过test2
数据库恢复。
我总是收到错误:
错误 3154:备份集保存现有数据库以外的数据库的备份。
我试过了:
我右击
test2 -> Restore database -> From device
我选择
test.bak
并检查了With Replace
但我得到了错误。然后我尝试右键单击
test2 -> Restore file and filegroups
我选择
test.bak
并检查了With Replace
但我得到了错误。
我可以删除我的旧数据库,然后使用正确的名称恢复我的备份,但是当我使用 SQL 2008 时,我在现有数据库上恢复没有问题。
看来自从我使用SQL2012以来,我经常遇到这个错误!
您应该使用
WITH REPLACE
并且通常避免使用 Management Studio 中的点击式东西 - 它们不灵活并且经常有错误。这对我有用:
此外,您应该确保在备份您使用的数据库时
WITH INIT
和/或不要将设备指向已包含备份的文件(因为它可能与您现在正在备份的数据库不同 - 特别是如果您重用名称,例如test
...)。您正在恢复错误的数据库。不要将其视为“
test2
使用来自的备份进行test
还原”,而是将其视为“还原我的备份test
但将其重命名为test2
”。您可以从中选择还原任务test
并将其放入test2
“到数据库:”字段中。正如 Aaron 所提到的,学习脚本而不是依赖向导——更清楚地知道在哪里发生了什么。
1) 使用命令
WITH REPLACE
时使用RESTORE
。2)使用命令
DROP
再次发生冲突并恢复的旧数据库。RESTORE
SQL Server 版本没有问题。正如 Aaron 指出的那样,我还能够将数据库从 2008 年恢复到 2012 年以及相同的版本。
您仍然可以这样做,但它需要一个额外的步骤。
打开恢复对话框,按照 2008 年的习惯进行常规选择。如果原始数据库是 DB,则选择 DB.bak 设备作为 Source 并将 Destination name 更改为 DBTest。然后在选择页面(左上角)下,您会看到常规/文件/选项 - 选择文件。在网格中查看。您将看到原始文件名和恢复为文件名的列。手动加宽后者并输入新名称(如果数据库的原始名称是 DB,并且您要创建 DBTest,则将 ....\DB.mdf 更改为 ...\DBTest.mdf 等)
这将接受您的 DB .bak 文件作为源和 DBTest 作为目标。您可能还需要转到选项页面并选择替换。由于其他原因,我需要这样做,因此如果没有此选项,我将无法对其进行测试。
正如所指出的,正确的答案是使用该
WITH REPLACE
选项。我只想指出
WITH REPLACE
,如果您尝试从差异备份(没有完整备份)恢复,即使使用 ,您也可能会遇到问题中的错误。希望这会奏效。
请停止您正在运行的服务器,然后恢复数据库,它将帮助您。:)