从同一服务器上另一个数据库的备份中创建新数据库?


75

我正在尝试从同一服务器上数据库的旧备份创建一个新数据库。使用SQL Server Management Studio并尝试从备份还原到新数据库时,出现此错误

System.Data.SqlClient.SqlError: The backup set holds a backup of a database 
other than the existing 'test' database. (Microsoft.SqlServer.Smo)

谷歌搜索后,我发现了这段代码

    RESTORE DATABASE myDB

 FROM DISK = 'C:\myDB.bak'

 WITH MOVE 'myDB_Data' TO 'C:\DATA\myDB.mdf',

MOVE 'myDB_Log' TO 'C:\DATA\myDB_log.mdf'
GO

我想知道move语句是否会使备份来自该服务器的数据库混乱?

谢谢,所有帮助表示赞赏。


建议您尝试:dba.stackexchange.com
JohnFx 2012年

不,还原不会影响其原始源数据库(除非您将其还原至该数据库)
simon coleman

Answers:


129

我认为这比这容易。

  • 首先,创建一个空白目标数据库。
  • 然后,在“ SQL Server Management Studio”还原向导中,寻找用于覆盖目标数据库的选项。它在“选项”选项卡中,称为“覆盖现有数据库(替换)”。检查。
  • 请记住在“文件”页面中选择目标文件。

您可以在向导的左侧更改“标签”(常规,文件,选项)


2
非常感谢,我之前曾尝试在Management Studio中使用“替换”选项,但没有执行“文件”部分。做了您的建议,现在正在创建数据库。
飞轮2012年

尝试上述解决方案时,我就遇到了这个问题- >“备份集保存数据库的比现有的其他备份”什么工作出色,我为解决这里找到: stackoverflow.com/questions/10204480/...
user7023213

73

甚至完全不需要创建空白数据库即可还原。

在Sql Server Management Studio中,右键单击“数据库”,然后选择“还原数据库...”。 在此处输入图片说明

在“还原数据库”对话框中,照常选择“源数据库”或“设备”。选择源数据库后,SSMS将基于数据库的原始名称填充目标数据库名称。

然后可以更改数据库的名称并输入新的目标数据库名称

在此处输入图片说明

使用这种方法,您甚至不需要转到“选项”选项卡,然后单击“覆盖现有数据库”选项。

同样,数据库文件将与您的新数据库名称一致地命名,并且如果需要,您仍然可以选择更改文件名。


3
这是最好的选择之一!
user2040021

4
我希望我可以不止一次投票!这实际上是我一直在寻找的答案,而不是更偏高的答案中描述的解决方法!
Trebor

3
该解决方案对我有用,但是仅当我专门将“文件”选项卡中的“还原为”文件名更改为尚不存在的名称时。否则,我将收到“文件已在使用中,无法覆盖”的还原失败错误消息。
杰里米(Jeremy)

1
这是最好的解决方案。正如@Jeremy指出的那样,答案没有提到需要替换“ Restore As”路径的必要。恢复之前,必须在此处设置新的数据库路径。
Pedro Fonseca

1
这也为我工作!:)我不得不禁用,Take tail-log backup before restore因为我遇到了如下所述的错误stackoverflow.com/a/29497004/5588197
Jan Paolo


1

可以将其视为存档。MyDB.Bak包含MyDB.mdf和MyDB.ldf。

使用Move进行还原,以说HerDB基本上是从备份中获取MyDB.mdf(和ldf),并将它们复制为HerDB.mdf和ldf。

因此,如果您在服务器实例上已经具有MyDb,则还原到该实例将不会受到影响。

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.