备份集保存除现有数据库以外的数据库备份


485

我正在尝试为我的数据库还原SQL Server备份文件,但是它抛出如下错误:

备份集保存除现有数据库以外的数据库备份

我在SQL Server 2008中的数据库和备份文件是在2005年。

可能是什么问题?


95
以下获得高度投票的答案是一把大锤,可以破解。该问题很可能是您没有在“ 还原”>“选项”窗口中选择“ 覆盖现有数据库(替换) ”选项。我在使用命令行时遇到了这个问题,并通过使用进行了修复。WITH MOVEWITH REPLACE, MOVE
James McCormack

我的一个数据库出现相同的错误,但仅当SQL Server代理关闭时。如果我打开它,就没有错误,并且我可以毫无问题地还原。我的BAK文件仅包含一个数据库,并且该数据库名称(和逻辑文件名)在我的服务器上是唯一的。
开发人员网站

Answers:


807

我也遇到过这个问题。

解决方案:

  • 不要创建一个空数据库并将.bak文件还原到该数据库上。
  • 右键单击SQL Server Management Studio的“数据库”分支,可以使用“还原数据库”选项,并在提供还原源的同时提供数据库名称。
  • 如果另一个数据库仍然存在,也请在“文件”处更改文件名。否则,您将获得“文件'...'无法覆盖。数据库'yourFirstDb'正在使用它”。

102
SSMS告诉我发生错误的时间非常容易
cja

16
为“ 不要创建一个空数据库并将.bak文件恢复到该数据库 ” +1 ,可以解决。(但是为什么我做其他事情都没得到其他所有问题?而且我们不是只从头开始做这个预先创建的方法来解决其他一些莫名其妙的错误消息吗?:])
Reg Edit

有人应将此标记为答案,因为这是成功还原备份所需的建议。
多琳2014年

2
在“还原数据库”中,我转到“文件”,“还原为”,并输入唯一的文件名,因为它仍然具有数据和日志文件的原始名称。
Dave Mateer

2
如果另一个数据库仍然存在,也请在“文件”处更改文件名。否则,您将获得“文件'...'无法覆盖。数据库'yourFirstDb'正在使用它”。
Verena Haunschmid '16

175

要么:

1)WITH REPLACE在使用RESTORE命令时使用(如果使用GUI,可以在选项->覆盖现有数据库(WITH REPLACE)下找到它)。

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

检查链接以获取更多详细信息。


1
从链接复制并提供了链接。.**叹气*(智能)
Abhijeetchindhe 2012年

4
@Abhijeetchindhe哈哈..可重用性和礼貌.. :)
Amarnath

:)一个诚实的软件,您好!无论如何,这是此问题的最佳答案。并为您抽出时间找到它进行投票:)
Abhijeetchindhe 2012年

1
遇到了与op相同的问题,此答案很好用。+1
埃斯特万

1
这个WITH REPLACE选项也是我需要的解决方案。谢谢!
亚当

90

首先创建一个同名的空白数据库。然后选择还原选项

在左窗格的“ 选项 ”下,不要忘记选择

  • 覆盖现有数据库
  • 保留复制设置

在此处输入图片说明

而已


51

遇到了相同的问题,并使用SSMS 2014通过执行此操作找到了解决方案

-只需选择覆盖现有数据库的选项即可(替换) 

现有数据库>任务>还原>数据库


34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

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

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';

33

简单的3个步骤:

1-右键单击数据库→任务→还原→数据库

2-检查Device作为源并找到.bak(或压缩的.bak)文件

3-在左窗格中单击,options然后:

  • 检查覆盖现有数据库。
  • 取消选中在还原之前进行尾日志备份
  • 选中关闭与目标数据库的现有连接。

其他选项实际上是可选的(当然很重要)!


23

这是因为原始文件中的.mdf.ldf文件Db位于,c:\programFile\....并且此信息保存在备份中!

如果在安装所在的其他SQL Server上创建相同的数据库,c:\program Files (x86)\ ....则无法照常还原。您需要重新定位.mdf.ldf文件的路径。

因此:

  • 在新服务器上创建一个空的数据库

  • 右键单击空的Db>任务>恢复>数据库>单击设备选择.bak文件>选择Db还原到

  • 单击左侧的文件>选择“将所有文件定位到文件夹”
  • 单击左侧站点上的选项>单击覆盖

做完了!
希望能帮助到你!


16

我今天遇到了类似的问题。尝试了上述所有解决方案,但没有奏效。所以在这里发布我的解决方案。

还原前,请不要忘记取消选中“长尾备份”

还原前,请不要忘记取消选中“长尾备份”

希望它也能帮助别人!


这对我有用。谢谢!
比尔·诺曼

16

如果您使用脚本方法,并且遇到有关LDF和MDF文件的错误,则可以首先使用以下方法在备份文件中查询备份集中文件逻辑名(和其他详细信息):

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

您将获得类似于以下内容的结果:

在此处输入图片说明

然后可以在查询中使用这些逻辑名:

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

有关更多信息,请RESTORE FILELISTONLY 参见SQL Server文档


我在问题中遇到了同样的问题,在我的情况下,Db备份来自远程服务器,我必须在D驱动器中创建与第一个查询的输出类似的文件夹结构。然后,第二个查询正常工作,数据库已还原。
rinilnath

11

同样重要的是要确保您的数据库名称与您要还原的备份中的数据库名称匹配。如果不匹配,您将得到相同的错误。


如果您有多个文件/文件组和分区表,这似乎尤其正确
AlexC 2013年

9

在执行其他任何操作之前,请确认您的备份是完整备份还是差异备份。如果您尝试通过差异备份创建新数据库,那么无论您做什么,都会遇到该错误。


1
这是我遇到的问题,因此谢谢!!!(我不知道备份文件实际上是差异备份。)检查方法如下:“从磁盘还原HEADERONLY ='C:\ myfile.bak'”在结果中,BackupType为1 =完全备份。BackupType为5 =差异备份。
Wimpie Ratte '17

9

system.data.sqlclient.sqlerror:备份集保存除现有“ Dbname”数据库以外的数据库的备份

我碰巧找到了灵魂

  1. 不要用相同或不同的数据库名称创建数据库!重要。

  2. 右键单击数据库| 任务>还原>数据库

  3. 在“还原源”下,选择“来自设备”

  4. 选择.bak文件

  5. 在下面的网格视图中选中数据库的复选框

  6. 到数据库:“在这里您可以键入新的数据库名称”(例如:DemoDB)

  7. 不要从DropDownlist中选择现有数据库

  8. 现在单击确定按钮,它将创建一个新的数据库并从.bak文件中还原所有数据。

您甚至可以从此链接获得帮助

希望它能帮助您解决问题...


1
“不要使用相同或不同的数据库名称创建数据库!重要。” 你什么意思?
萨吉德

6

这总是由于版本不兼容引起的。请按照以下步骤解决:

步骤1:使用您的首选名称创建一个数据库。(在我们的情况下是AdventureWorks)

步骤2:在数据库上单击写入,然后单击任务>>还原>>数据库…

在此处输入图片说明

步骤3:在还原屏幕上,转到“选项”的第三选择。现在,选中“覆盖现有数据库(替换)”复选框

在此处输入图片说明

步骤4:点击OK(确定)。它应该成功还原数据库。

注意:使用REPLACE还原数据库时,它将覆盖旧数据库。


感谢Alireza的努力。.但是,我们使用查询而不是GUI。
Pugal

5

我遇到的同样问题。对我来说解决方案是:

  1. 右键单击数据库。
  2. 选择任务,选择还原数据库。
  3. 单击左侧的选项。
  4. 选中第一个选项OverWrite现有数据库(WITH REPLACE)。
  5. 转到常规,选择源数据库和目标数据库。
  6. 单击确定,就这样

3

我只是想解决这个问题。

我已经尝试了一切,从以管理员身份运行到这里和其他地方的建议;最终为我解决的是检查“文件”属性选项卡中的“重定位文件”选项。

希望这可以帮助其他人。


3

我必须在本地创建一个新的数据库以进行测试,而我的产品也提供了备份。我首先创建了数据库,然后尝试在新数据库之上运行BAK,这对我产生了此错误。我删除了数据库并还原了它,同时在还原屏幕本身中获取了新的数据库名称。该数据库是在还原时自动创建的。


3

你们中有些人对此非常复杂。我发现这非常简单。

1)创建一个与您的.bak文件数据库名称相同的数据库!重要

2)右键单击数据库| 任务>还原>数据库

3)在“还原源”下,选择“来自设备”

4)选择.bak文件

5)在下面的网格视图中选中数据库的复选框

6)在右侧的“选择页面”下,选择“选项”

7)选中标有“保留复制设置(通过KEEP_REPLICATION)的复选框”

现在返回“常规”页面,然后单击“确定”以还原数据库...就是这样。


“选择页面”在哪里?
KansaiRobot



1

您可以还原到新的数据库,验证文件名语法,该语法将在日志文件中,对于新的SQL版本,其后缀为“ _log”

检查选项选项卡中的覆盖现有数据库标志

法比奥



0

我试图将生产数据库还原到同一服务器上的登台数据库。

在我看来,唯一有效的方法是还原到新的空白数据库。这很好用,没有尝试覆盖生产文件(如果您只是将生产备份文件还原到现有的登台数据库,则将这样做)。然后删除旧数据库并重命名-文件将保留新的临时名称,但就我而言,这很好。

(或者首先删除该暂存数据库,然后可以使用与该暂存数据库相同的名称还原到新数据库)



0

这有助于我从系统驱动器导入备份文件

  1. 创建一个与您的.bak文件数据库名称相同(最好)的数据库
  2. 右键单击数据库>任务>还原>数据库
  3. 在“还原源”下,选择“来自设备”
  4. 选择.bak文件,然后从系统中选择路径
  5. 在下面的列表框中选择数据库的复选框
  6. 在右侧的“选择页面”下,选择“选项”
  7. 选中标有“保留复制设置(通过KEEP_REPLICATION)的复选框”
  8. 选中“覆盖现有数据库(可替换)”复选框,现在返回“常规”页面,然后单击“确定”以还原数据库...
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.