0

从差异备份还原数据库时,我遇到了一个问题。下面是我在LSN 81125000000059600297,这是太新,执行SQL Server 2008中的差异备份;能够通过SSMS进行恢复,但无法通过事务性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:\DBData\DBName_delta.mdf', 
    MOVE 'DBName_Image_Data' TO 'E:\DBData\DBName_delta_Image_Data.mdf', 
    MOVE 'DBName_Log' TO 'D:\DBLog\DBName_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 

消息4305,级别16,状态1,2号线
日志在此备份集开始的步骤来应用到数据库。包含LSN 81121000000116200001的较早日志备份可以恢复。

消息3013,级别16,状态1,行2
RESTORE LOG正在异常终止。

RESTORE FILELISTONLY FROM DISK = 'E:\DiffBak2.TRN' 
GO 
RESTORE LOG DBName_delta FROM DISK='E:\DiffBak2.TRN' WITH STANDBY = 'c:\undo.ldf' 
GO 

但是,当我试图还原相同E:通过使用不带恢复选项\ DiffBak1.TRN通过SSMS,它还原数据库和我又是能够执行同一文件的使用恢复Transact SQL。我在这里错过了什么吗?这与RESTORE DATABASE有关吗?我相信我们不会错过之间的任何日志。任何帮助都感激不尽。

回答

0

我能够弄清楚这一点。正如我所提到的,我能够通过SSMS向导恢复差异数据库,我从向导中获取了脚本,并发现了查询中的差异。

我用下面的代码

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

这意味着您在文件路径中有非英文字符。 “N”前缀表示该字符串是Unicode。如果所有字符都是英文,则不需要。 –

+0

不完全。第二个代码不是恢复日志,而是恢复数据库。这有所作为。我脚本化了这个步骤,发现了不同之处。 –