ChatGPT解决这个技术问题 Extra ChatGPT

SQL-Server:备份集包含一个数据库的备份,而不是现有的

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

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

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

可能是什么问题?

下面被高度投票的答案是敲碎坚果的大锤。问题很可能是你没有在Restore>中选择“Overwrite the existing database (WITH REPLACE)”选项。选项 窗口。我在命令行中使用 WITH MOVE 遇到了这个问题,并通过使用 WITH REPLACE, MOVE 解决了这个问题。
我的一个数据库也有同样的错误,但只有在 SQL Server 代理关闭时。如果我打开它,没有错误,我可以毫无问题地恢复。我的 BAK 文件仅包含一个数据库,并且该数据库名称(和逻辑文件名)在我的服务器上是唯一的。

M
Matthew Lock

我也遇到过这个问题。

解决方案 :

不要创建空数据库并将 .bak 文件还原到其中。

使用通过右键单击 SQL Server Management Studio 的“数据库”分支可访问的“恢复数据库”选项,并在提供要恢复的源的同时提供数据库名称。

如果其他数据库仍然存在,还要更改“文件”处的文件名。否则你会得到“文件'...'不能被覆盖。它正在被数据库'yourFirstDb'使用”。


+1 表示“不要创建空数据库并将 .bak 文件恢复到其中”......是的,这解决了它。 (但是为什么我在做同样的事情的时候没有遇到这个问题?而且我们不是一开始就开始进行预创建作为其他一些莫名其妙的错误消息的解决方法吗?:])
在“还原数据库”中,我转到“文件”,“还原为”,并输入唯一的文件名,因为它仍然具有数据和日志文件的原始名称。
如果其他数据库仍然存在,还要更改“文件”处的文件名。否则你会得到“文件'...'不能被覆盖。它正在被数据库'yourFirstDb'使用”。
在 SQL Server 2014 上,在文件选项卡中,由于某种原因,还原位置默认设置为 ...\MSSQL\dbname...。我必须更改为 ...\MSSQL\DATA\dbname.... 才能使其正常工作。
@Deqing 这意味着您不会创建一个空的 Db,然后右键单击它来恢复备份文件,您只需打开 SQL 右键单击根数据库文件夹,然后选择 RESTORE。在还原窗口中,给出一个唯一的 DB 名称,您希望它会自行创建 Db。
u
user3666197

任何一个:

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

2) Delete 发生冲突的旧数据库并使用 RESTORE 命令再次恢复。

查看 link 了解更多详情。


此技术允许将 2008R2 数据库恢复到 2012 服务器。
H
HimalayanCoder

首先创建一个同名的空白数据库。然后去恢复选项

在左侧窗格的选项下不要忘记选择

覆盖现有数据库

保留复制设置

https://i.stack.imgur.com/ffoG7.png

而已


S
Smit Patel

遇到同样的问题并通过这样做找到了解决方案,使用 SSMS 2014

- Just select the Option Overwrite the existing database(WITH REPLACE) 

https://i.stack.imgur.com/XRhmL.png


B
Bruno Belotti
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';

A
Alireza Abdollahnejad

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

第 1 步:使用您的首选名称创建数据库。 (在我们的例子中是 AdventureWorks)

第 2 步:写入单击数据库,然后单击任务 >> 恢复 >> 数据库...

https://i.stack.imgur.com/IkIND.jpg

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

https://i.stack.imgur.com/HywOw.jpg

第四步:点击确定。它应该成功地恢复数据库。

注意:当您使用 REPLACE 恢复数据库时,它将覆盖旧数据库。


对我来说,第 3 步就足够了
在 SQL Server 15 中工作
A
Ali Sheikhpour

简单的3个步骤:

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

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

3- 在左窗格中单击 options 并:

选中覆盖现有数据库。

取消选中在还原之前进行尾日志备份

检查关闭与目标数据库的现有连接。

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


t
tinonetic

如果您使用脚本方法并且遇到有关 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

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

https://i.stack.imgur.com/VlzQ1.png

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

    -- 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 驱动器中创建与第一个查询的输出类似的相同文件夹结构。然后第二个查询正常工作并恢复了数据库。
H
HELPER

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

如果您在安装在 c:\program Files (x86)\ .... 上的不同 SQL Server 上创建相同的数据库,则您无法像往常一样恢复。您需要重新定位 .mdf.ldf 文件的路径。

所以:

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

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

单击左侧的文件>选择“将所有文件重新定位到文件夹”

单击左侧站点上的选项>单击覆盖

完毕!希望能帮助到你!


i
immayankmodi

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

还原前不要忘记取消选中 Tail-long Backup

https://i.stack.imgur.com/rsGsf.jpg

希望它也能帮助别人!


A
Andrew Marais

同样重要的是要确保您的数据库名称与您尝试恢复的备份中的数据库名称相匹配。如果不匹配,您将收到相同的错误。


如果您有多个文件/文件组和分区表,这似乎尤其如此
j
jpaugh

system.data.sqlclient.sqlerror:备份集包含一个数据库的备份,而不是现有的“Dbname”数据库

我偶然发现了灵魂

不要创建具有相同名称或不同数据库名称的数据库!重要。右键单击数据库|任务 > 还原 > 数据库 在“还原源”下选择“从设备”选择 .bak 文件 在“到数据库”下方的网格视图中选中数据库复选框:“在此处您可以键入新数据库名称”(例如:DemoDB)不要t 从 DropDownlist 中选择 Existing Database 现在单击 Ok 按钮,它将创建一个新的数据库并从您的 .bak 文件中恢复所有数据。

you can get help from this link even

希望对解决您的问题有所帮助...


“不要创建具有相同名称或不同数据库名称的数据库!重要。”你是什么意思?
T
Tots Benedicto

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


这是我遇到的问题,所以谢谢你!!! (我不知道备份文件实际上是差异备份。)。检查方法如下:“RESTORE HEADERONLY FROM DISK = 'C:\myfile.bak'” 在结果中,BackupType 为 1 = 完全备份。 BackupType 为 5 = 差异备份。
w
waka

我也有同样的问题。我的解决方案是:

右键单击数据库。选择任务,选择恢复数据库。单击左侧的选项。检查第一个选项覆盖现有数据库(替换)。转到常规,选择源和目标数据库。点击确定,就是这样


C
Clint

我只是想解决这个问题。

从以管理员身份运行到在此处和其他地方找到的建议,我都尝试过;最后为我解决的问题是检查“文件”属性选项卡中的“重新定位文件”选项。

希望这对其他人有帮助。


R
Rolon

你们中的一些人对此过于复杂。我发现这非常简单。

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

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

3)在“恢复源”下选择“从设备”

4) 选择 .bak 文件

5)在下面的gridview中选中数据库的复选框

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

7)选中标记为“保留复制设置(WITH KEEP_REPLICATION)的复选框

现在回到常规页面并单击确定以恢复数据库......就是这样。


“选择页面”在哪里?
A
Angelina Ilieva

我不得不在我的本地创建新的数据库进行测试,并且我从我的产品中得到了备份。我首先创建了数据库并尝试在新数据库之上运行 BAK,这为我产生了这个错误。我删除了数据库并将其恢复,同时在恢复屏幕本身中获取新的数据库名称。数据库是在还原时自动创建的。


A
Altaf Patel

我使用生成脚本通过替代方式完成了工作。这确实对我有用,因为由于相同的错误,备份-还原无助于解决问题。


P
Priyanka Rawat

在选项中,将“还原为”文件名更改为新的数据库 mdf 和 ldf。它引用源数据库 .mdf 和 .ldf 文件。


F
Fabio

您可以恢复到新数据库,验证文件名语法,它将在日志文件中,新的 SQL 版本将是“_log”后缀

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

法比奥


P
Prajwal Bhat

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

创建一个与您的 .bak 文件数据库名称同名(最好)的数据库 右键单击数据库 > 任务 > 还原 > 数据库 在“还原源”下选择“从设备”选择 .bak 文件,从系统中选择路径 选择下方列表框中的数据库复选框 在右侧的“选择页面”下 选择“选项” 选中标记为“保留复制设置(WITH KEEP_REPLICATION)”的复选框 选中“立即覆盖现有数据库(WITH REPLACE)”复选框回到General页面,点击OK恢复数据库...


P
Popas

我确定这个问题与文件和文件夹权限有关。


m
mike nelson

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

在我的情况下唯一有效的是恢复到一个新的空白数据库。这很好用,没有尝试覆盖生产文件(如果您只是将生产备份文件恢复到现有的暂存数据库,就会这样做)。然后删除旧数据库并重命名 - 文件将保留新的临时名称,但在我的情况下这很好。

(或者先删除暂存数据库,然后您可以恢复到与暂存数据库同名的新数据库)


A
Ali Sadri

而不是单击还原数据库单击还原文件和文件组..

这在我的 sql server 上工作


G
G. D'Angelo

我有同样的问题,但在 PS 上。我把它留在这里以防有人试图做同样的事情

Restore-SqlDatabase -ServerInstance "<your instance name>" -Database "<your db name>" -BackupFile "<backup file route>.bak" -ReplaceDatabase

记得使用 Set-ExecutionPolicy Unrestricted -Force 并导入 import-module sqlps。完成后不要忘记将执行策略设置回受限。


N
Naser Nikzad

通常处理 .bak 文件会让人头疼,更直接的方法是使用 sqldump 文件传输数据库。

生成要移动或复制的当前数据库的脚本。而不是整个数据库,选择所有表。从选项菜单中选择另存为脚本,然后单击高级按钮并设置以下配置(我正在起诉 MSSQL 2016):现在,您要在其中导入这些数据,创建一个新数据库,切换到这个新数据库(我的意思是将其设置为默认值)最后运行脚本,将导入所有表和数据。

祝你好运。

项目清单