SQL Server 2008中的差异备份;能够通过SSM恢复,但无法通过Transact SQL恢复



我在恢复差分备份的数据库时面临问题。这是我执行的步骤

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>’;

最新更新