我在恢复差分备份的数据库时面临问题。这是我执行的步骤
DROP DATABASE DBName_delta
GO
BACKUP DATABASE DBName TO DISK = 'E:Fullbak1.bak'
GO
RESTORE FILELISTONLY FROM DISK = 'E:Fullbak.bak'
GO
RESTORE DATABASE DBName_delta
FROM DISK='E:Fullbak.bak'
WITH MOVE 'DBName_Data' TO 'E:DBDataDBName_delta.mdf',
MOVE 'DBName_Image_Data' TO 'E:DBDataDBName_delta_Image_Data.mdf',
MOVE 'DBName_Log' TO 'D:DBLogDBName_delta.ldf',
NORECOVERY
--Made Some changes in the database
BACKUP DATABASE DBName
TO DISK = 'E:DiffBak1.TRN'
WITH DIFFERENTIAL
GO
--Made Some more changes in the database
BACKUP DATABASE DBName
TO DISK = 'E:DiffBak2.TRN'
WITH DIFFERENTIAL
GO
RESTORE FILELISTONLY FROM DISK = 'E:DiffBak1.TRN'
GO
RESTORE LOG DBName_delta FROM DISK='E:DiffBak1.TRN' WITH NORECOVERY
GO
msg 4305,16级,状态1,第2行
此备份集中的日志始于LSN 81125000000059600297,该日志太近了,无法应用于数据库。可以恢复包括LSN 81121000000116200001的早期日志备份。msg 3013,第16级,状态1,第2行
还原日志终止异常。
RESTORE FILELISTONLY FROM DISK = 'E:DiffBak2.TRN'
GO
RESTORE LOG DBName_delta FROM DISK='E:DiffBak2.TRN' WITH STANDBY = 'c:undo.ldf'
GO
但是,当我尝试通过使用with norecovery选项来恢复相同的e: diffbak1.trn时,它会恢复数据库,并且我再次能够使用Transact SQL执行同一文件的还原。我在这里错过了什么吗?这与还原数据库有关吗?我确定我们不会缺少两者之间的任何日志。任何帮助将不胜感激。
我能够解决这个问题。正如我提到的那样,我能够通过SSM向导还原差分数据库,我从向导中获取了脚本,并发现了查询中的差异。
我正在使用以下代码
RESTORE LOG DBName_delta FROM DISK='E:DiffBak1.TRN' WITH NORECOVERY
GO
我已将代码更改为
RESTORE DATABASE [DBrel02t_delta] FROM DISK = N'E:DiffBak1.TRN' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
这解决了问题。使用以下查询查找备份的LSN详细信息。
RESTORE HEADERONLY FROM DISK = N’<backup file>’;