Sql-Server

我的還原過程是否受到此第三方非僅複製備份的嚴重影響?

  • September 29, 2017

這個問題可能讀起來像重複,但是是基於情況的,並且是從應用其他答案的知識的混亂中發布的。

我已經閱讀了數十篇​​文章(在1234中),但發現了相互矛盾的意見(根據我的理解,現在資訊過載,或者在我的其他問題中可能沒有包含足夠的資訊)。因此,我創建這個問題是為了根據我的情況得到明確的答案。

鑑於以下備份場景,我需要知道第三方備份軟體是否會阻止我執行完全恢復到最新備份點(18:00)?

Time  | Action                                       | Device   
------|----------------------------------------------|----------------------------
12:00 | Full backup (non copy_only)                  | D:\MyBackupDevice                 
13:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
14:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
15:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
16:00 | Full backup (non copy_only) VSS snapshot     | Third-party off-site device
17:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                
18:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
19:00 | Disaster strikes                             |                                   

我的恢復目標是恢復到 18:00 備份點(我知道也可以添加一個尾日誌備份,以使剩餘的事務保持到災難發生,但現在讓我們保持簡單) .

基於這個答案,我相信第三方備份會導致與我自己的事務日誌恢復發生衝突(根據這個答案),這會阻止我執行我的恢復到那個點。我的理解是事務日誌備份包含自上次完整非 copy_only 備份以來的數據。

它是否正確?第三方備份是否會因為它是非 copy_only 備份而阻止我自己的恢復常式工作?

也許這會幫助你理解。讓我們做一個展示!我們將使用一些虛擬數據創建一個虛擬數據庫。

USE master;

/*Create a dummy database*/
CREATE DATABASE LogRestoreTest

/*We full now*/
ALTER DATABASE LogRestoreTest SET RECOVERY FULL

/*Context is everything*/
USE LogRestoreTest

/*If nothing changes, do we even need a log backup?*/
CREATE TABLE dbo.t1 (Id INT)

現在我們將進行一次完整備份。只有一個。承諾。

/*Take a full backup, dummy*/

BACKUP DATABASE LogRestoreTest 
TO DISK = 'F:\Backup\LRT_FULL.bak' 
WITH INIT, FORMAT, COMPRESSION

現在我們將進行一些更改並進行一些日誌備份。就像現實生活一樣。好有趣。還沒喝。

/*Make a change*/
INSERT dbo.t1 (Id )
VALUES ( 1 )

/*Take a log backup*/
BACKUP LOG LogRestoreTest 
TO DISK = 'F:\Backup\LRT_LOG_1.trn' 
WITH INIT, FORMAT, COMPRESSION

/*Make another change*/
INSERT dbo.t1 (Id )
VALUES ( 2 )

/*Take another log backup*/
BACKUP LOG LogRestoreTest 
TO DISK = 'F:\Backup\LRT_LOG_2.trn' 
WITH INIT, FORMAT, COMPRESSION

/*Make another change*/
INSERT dbo.t1 (Id )
VALUES ( 3 )

現在我們將進行“帶外”完整備份和另一個日誌備份。

/*A second full backup appears!*/
BACKUP DATABASE LogRestoreTest 
TO DISK = 'F:\Backup\LRT_FULL_2.bak' 
WITH INIT, FORMAT, COMPRESSION

/*Take another log backup*/
BACKUP LOG LogRestoreTest 
TO DISK = 'F:\Backup\LRT_LOG_3.trn' 
WITH INIT, FORMAT, COMPRESSION

如果我想將數據恢復到第三個日誌備份,我有兩個選擇。

還原第一個完整備份和所有三個日誌備份:

/*Restore the full backup*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_FULL.bak' 
WITH REPLACE, NORECOVERY


/*Square one*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_1.trn' 
WITH NORECOVERY

/*What about to here?*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_2.trn' 
WITH NORECOVERY

/*Obligatory Your Mom*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_3.trn' 
WITH NORECOVERY

或者我可以恢復最近的完整日誌文件,然後是最終的日誌文件:

/*Restore the full backup*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_FULL_2.bak' 
WITH REPLACE, NORECOVERY


/*What happens if I try to jump the restores?*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_3.trn' 
WITH NORECOVERY

請原諒我沒有在這裡解釋差異備份,但是那裡有很多資源可以涵蓋 DBA 101 材料。

希望這可以幫助!

引用自:https://dba.stackexchange.com/questions/187138