我正在尝试为我的数据库恢复一个SQL Server备份文件,但是出现以下错误:
备份集保存的是一个与现有数据库不同的数据库的备份
我的数据库运行在SQL Server 2008上,而备份文件是在2005上创建的。
可能的问题是什么?
我正在尝试为我的数据库恢复一个SQL Server备份文件,但是出现以下错误:
备份集保存的是一个与现有数据库不同的数据库的备份
我的数据库运行在SQL Server 2008上,而备份文件是在2005上创建的。
可能的问题是什么?
我也遇到了这个问题。
解决方案:
.bak
文件还原到其中。方法一:
在使用RESTORE
命令时,可以使用WITH REPLACE
选项(如果使用GUI,则在选项中找到覆盖现有数据库的选项(WITH REPLACE
))。
方法二:
删除
冲突的旧数据库,并使用RESTORE
命令再次还原。
请查看链接了解更多细节。
首先,创建一个与原数据库同名的空白数据库。然后选择恢复选项。
在左侧面板的选项下,不要忘记选择:
就是这样。
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';
简单的3步:
1- 右键单击数据库 → 任务 → 恢复 → 数据库
2- 选择设备
为源,并定位.bak(或压缩的 .bak)文件
3- 在左侧窗格中单击选项
并且:
其他选项真的是可选的(当然也很重要)!
如果您正在使用脚本方法并且遇到有关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://learn.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 文档中找到。
这是因为原始数据库的.mdf
和.ldf
文件位于可能是c:\program File\....
,且此信息已保存在备份中!
如果您在安装在c:\program Files (x86)\ ....
上的不同SQL服务器上创建相同的DB,则无法像通常那样还原。 您需要重新定位.mdf
和.ldf
文件的路径。
因此:
在新服务器上创建空DB
右键单击空DB>任务>还原>数据库>单击设备选择您的.bak
文件>选择要还原到的DB
完成!
希望能有所帮助!
今天我遇到了类似的问题。尝试了上面所有的解决方法,但都不起作用。因此在这里发布我的解决方案。
恢复之前不要忘记取消勾选“Tail-long Backup”
希望对其他人有所帮助!
WITH MOVE
命令时遇到过这个问题,后来通过使用WITH REPLACE, MOVE
进行修复。 - James McCormack