SQL-Server:备份集包含一个数据库的备份,而不是现有的
Posted
技术标签:
【中文标题】SQL-Server:备份集包含一个数据库的备份,而不是现有的【英文标题】:SQL-Server: The backup set holds a backup of a database other than the existing 【发布时间】:2012-04-29 13:47:36 【问题描述】:我正在尝试为我的数据库恢复一个 SQL Server 备份文件,但它抛出如下错误:
备份集保存现有数据库以外的数据库备份
我的数据库在 SQL Server 2008 中,备份文件在 2005 年。
可能是什么问题?
【问题讨论】:
下面投票率高的答案是一把大锤来破解坚果。问题很可能是您没有在 Restore > Options 窗口中选择“Overwrite the existing database (WITH REPLACE)”选项。我在命令行中使用WITH MOVE
遇到了这个问题,并通过使用WITH REPLACE, MOVE
解决了这个问题。
我的一个数据库出现了同样的错误,但只有在 SQL Server 代理关闭时才会出现。如果我打开它,没有错误,我可以毫无问题地恢复。我的 BAK 文件仅包含一个数据库,并且该数据库名称(和逻辑文件名)在我的服务器上是唯一的。
【参考方案1】:
我也遇到过这个问题。
解决方案:
不要创建空数据库并将.bak
文件恢复到其中。
使用 'Restore Database' 选项可通过右键单击 SQL Server Management Studio 的“数据库”分支访问并提供数据库名称,同时
提供要恢复的源。
如果其他数据库仍然存在,还要更改“文件”中的文件名。否则你会得到“文件'...'不能被覆盖。它正在被数据库'yourFirstDb'使用”。
【讨论】:
发生错误时 SSMS 很容易告诉我这一点 +1 表示“不要创建空数据库并将 .bak 文件恢复到其中”......是的,这解决了它。 (但是为什么我在做同样的事情的时候没有遇到这个问题?而且我们不是一开始就开始做预创建作为解决一些 other 莫名其妙的方法错误信息?:]) 有人应该将此标记为答案,因为这是我成功恢复备份所需的建议。 在“还原数据库”中,我转到“文件”,“还原为”,并输入唯一的文件名,因为它仍然具有数据和日志文件的原始名称。 如果其他数据库仍然存在,也要更改“文件”处的文件名。否则你会得到“无法覆盖文件'...'。它正在被数据库'yourFirstDb'使用”。【参考方案2】:要么:
1) 在使用RESTORE
命令时使用WITH REPLACE
(如果使用GUI,则在选项-> 覆盖现有数据库(WITH REPLACE
)下找到)。
2) Delete
发生冲突的旧数据库并使用RESTORE
命令再次恢复。
查看link了解更多详情。
【讨论】:
从链接中复制并提供了链接 ..*sigh*(智能) @Abhijeetchindhe 哈哈 .. 可重用性和礼貌 .. :) :) 一个诚实的软件 呃你!无论如何,这是这个问题的最佳答案。并为您花费的时间投票:) 与操作有同样的问题,这个答案很好用。 +1 这个 WITH REPLACE 选项也是我需要的解决方案。谢谢!【参考方案3】:首先创建一个同名的空白数据库。然后去恢复选项
在左侧窗格的选项下不要忘记选择
覆盖现有数据库 保留复制设置就是这样
【讨论】:
【参考方案4】:使用 SSMS 2014 遇到了同样的问题并通过这样做找到了解决方案
- 只需选择选项覆盖现有数据库(替换)【讨论】:
【参考方案5】: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';
【讨论】:
【参考方案6】:简单的3个步骤:
1-右键单击数据库→任务→还原→数据库
2- 检查Device
作为源并找到.bak(或压缩的.bak)文件
3- 在左侧窗格中单击 options
并:
其他选项确实是可选的(当然也很重要)!
【讨论】:
【参考方案7】:这总是由于版本不兼容造成的。 按照以下步骤解决:
第 1 步:使用您的首选名称创建数据库。 (在我们的例子中是 AdventureWorks)
第2步:写点击数据库,然后点击任务>>恢复>>数据库...
第 3 步:在恢复屏幕上转到选项的第三个选项。现在选中复选框“覆盖现有数据库(WITH REPLACE)”
第 4 步:单击“确定”。它应该会成功恢复数据库。
注意:当您使用 WITH REPLACE 恢复数据库时,它将覆盖旧数据库。
【讨论】:
感谢 Alireza 的努力。但我们使用的是查询而不是 GUI。 对我来说,第 3 步就足够了 这个解决方案非常清晰,切中要害【参考方案8】:这是因为原始Db
中的.mdf
和.ldf
文件可能位于c:\programFile\....
,并且此信息保存在备份中!
如果您在安装在c:\program Files (x86)\ ....
上的不同 SQL Server 上创建相同的数据库,则无法像往常一样恢复。您需要重新定位 .mdf
和 .ldf
文件的路径。
因此:
在新服务器上创建一个空数据库
右键单击空 Db > 任务 > 还原 > 数据库 > 单击设备选择您的 .bak
文件 > 选择要还原到的 Db
完成! 希望对您有所帮助!
【讨论】:
【参考方案9】:如果您使用脚本方法并且遇到有关 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
can be found from the SQL Server docs的信息。
【讨论】:
我在问题中遇到了同样的问题,在我的情况下,Db 备份来自远程服务器,我必须在我的 D 驱动器中创建与第一个查询的输出类似的相同文件夹结构。然后第二个查询正常工作并恢复了数据库。【参考方案10】:我今天遇到了类似的问题。尝试了上述所有解决方案,但没有奏效。所以在这里发布我的解决方案。
不要忘记在恢复之前取消选中 Tail-long Backup
希望它也能帮助其他人!
【讨论】:
【参考方案11】:同样重要的是确保您的数据库名称匹配您尝试恢复的备份中的数据库名称。如果不匹配,你会得到同样的错误。
【讨论】:
如果您有多个文件/文件组和分区表,这似乎尤其如此【参考方案12】:system.data.sqlclient.sqlerror:备份集保存了一个数据库的备份,而不是现有的“Dbname”数据库
我偶然发现了灵魂
不要创建具有相同名称或不同数据库名称的数据库!重要。
右键单击数据库 |任务 > 恢复 > 数据库
在“还原源”下选择“从设备”
选择 .bak 文件
在下面的网格视图中选中数据库的复选框
到数据库:“在这里您可以输入新的数据库名称”(例如:DemoDB)
不要从下拉列表中选择现有数据库
现在点击 Ok 按钮,它将创建一个新的数据库并从您的 .bak 文件中恢复所有数据。
you can get help from this link even
希望它能帮助您解决问题...
【讨论】:
“不要创建具有相同名称或不同数据库名称的数据库!重要。”什么意思?【参考方案13】:在执行任何其他操作之前,请确认您的备份是完整备份还是差异备份。如果您尝试从差异备份中创建新数据库,那么无论您做什么都会遇到错误。
【讨论】:
这是我遇到的问题,非常感谢!!! (我不知道备份文件实际上是差异备份。)。检查方法如下:“RESTORE HEADERONLY FROM DISK = 'C:\myfile.bak'” 在结果中,BackupType 为 1 = 完全备份。 BackupType 为 5 = 差异备份。【参考方案14】:我也有同样的问题。我的解决方案是:
-
右键单击数据库。
选择任务,选择恢复数据库。
点击左侧的选项。
选中第一个选项 OverWrite the existing database(WITH REPLACE)。
转到常规,选择源和目标数据库。
点击确定,就这样
【讨论】:
【参考方案15】:你们中的一些人对此过于复杂。我发现这非常简单。
1) 创建一个与您的 .bak 文件数据库名称同名的数据库!重要
2) 右键单击数据库 |任务 > 恢复 > 数据库
3) 在“还原源”下选择“从设备”
4) 选择 .bak 文件
5) 在下面的gridview中选中数据库的复选框
6) 在右侧“选择页面”下选择“选项”
7) 选中标有“保留复制设置(WITH KEEP_REPLICATION)”的复选框
现在回到常规页面并单击确定以恢复数据库...就是这样。
【讨论】:
“选择页面”在哪里?【参考方案16】:我只是想解决这个问题。
我尝试了一切,从以管理员身份运行到在此处和其他地方找到的建议;最后为我解决的问题是检查“文件”属性选项卡中的“重新定位文件”选项。
希望这对其他人有所帮助。
【讨论】:
【参考方案17】:我必须在本地创建新的数据库以进行测试,并且我的产品有备份。我首先创建了数据库并尝试在新数据库之上运行 BAK,这为我产生了这个错误。我删除了数据库并将其恢复,同时在恢复屏幕本身中获取新的数据库名称。数据库是在还原时自动创建的。
【讨论】:
【参考方案18】:我使用生成脚本通过替代方式完成了工作。这对我来说确实有用,因为由于同样的错误,备份-还原无助于解决问题。
【讨论】:
【参考方案19】:在选项中,将“还原为”文件名更改为新的数据库 mdf 和 ldf。它正在引用源数据库 .mdf 和 .ldf 文件。
【讨论】:
【参考方案20】:您可以恢复到一个新的数据库,验证文件名语法,它将在日志文件中,对于新的 SQL 版本将是一个“_log”后缀
在选项选项卡中检查覆盖现有数据库标志
法比奥
【讨论】:
【参考方案21】:我确定这个问题与文件和文件夹权限有关。
【讨论】:
【参考方案22】:我试图将生产数据库恢复到同一服务器上的临时数据库。
在我的情况下唯一有效的是恢复到一个新的空白数据库。这很好用,没有尝试覆盖生产文件(如果您只是将生产备份文件恢复到现有的临时数据库,就会这样做)。然后删除旧数据库并重命名 - 文件将保留新的临时名称,但在我的情况下这很好。
(或者先删除暂存数据库,然后您可以恢复到与暂存数据库同名的新数据库)
【讨论】:
【参考方案23】:而不是点击Restore Database,点击Restore File and Filegroups..
这在我的 sql server 上工作
【讨论】:
【参考方案24】:这帮助我从系统驱动器导入备份文件
-
创建一个与您的 .bak 文件数据库名称同名(最好)的数据库
右键单击数据库 > 任务 > 还原 > 数据库
在“还原源”下选择“来自设备”
从系统中选择路径选择 .bak 文件
选中下面列表框中的数据库复选框
在右侧的“选择页面”下选择“选项”
选中标有“保留复制设置(WITH KEEP_REPLICATION)”的复选框
选中覆盖现有数据库的复选框(使用替换)
现在回到General页面,点击OK恢复数据库...
【讨论】:
【参考方案25】:我有同样的问题,但在 PS 上。我把它留在这里,以防有人试图做同样的事情
Restore-SqlDatabase -ServerInstance "<your instance name>" -Database "<your db name>" -BackupFile "<backup file route>.bak" -ReplaceDatabase
记得使用Set-ExecutionPolicy Unrestricted -Force
并导入import-module sqlps
。完成后不要忘记将执行策略设置回受限。
【讨论】:
以上是关于SQL-Server:备份集包含一个数据库的备份,而不是现有的的主要内容,如果未能解决你的问题,请参考以下文章