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

不完全。第二個代碼不是恢復日誌,而是恢復數據庫。這有所作爲。我腳本化了這個步驟,發現了不同之處。 –