簡體   English   中英

差異備份后發送SQL事務日志

[英]SQL transaction log shipping after differential backup

我面臨一個場景:

  1. 創建生產數據庫的完整備份
  2. 完全備份已還原到災難恢復數據庫
  3. 創建生產數據庫的差異備份,但意外刪除
  4. 在生產數據庫上啟動事務日志備份

問題是,是否可以將第一個生成的事務日志還原到災難恢復數據庫,或者必須先將刪除的差異數據庫備份還原到災難恢復數據庫?

簡短的回答是“否”,您需要一個/差異備份或一個新的完整備份。 因此,要么采用新的完整備份來重新啟動備份鏈,要么采用新的差異備份來替換丟失/刪除的備份。

簡化后,事務日志備份將保留自上次備份(任何備份;完整備份,差異備份或另一個事務日志備份)以來對數據庫所做更改的時間順序列表。 差異備份將保存自上次完全備份以來已更改的所有范圍的列表(因此包括同時已備份的任何事務日志備份)。 這也意味着,如果先創建完整備份,然后創建差異備份,再創建差異備份,則第二個差異備份將包含第一個差異備份中的所有內容。

典型的情況是先進行完整備份,然后再進行一些事務日志備份。 然后,下一步是差異備份,可能還會有更多的事務日志備份和差異備份,直到創建新的完整備份為止。

通過確保在發生災難的情況下可以備份事務日志的末尾,從而確保減少了恢復時間。 然后,您可以還原完整備份,然后還原最新的差異備份,再還原所有事務日志備份(按時間順序)。

[1]如果刪除了DIFF備份,那么我將創建另一個DIFF備份 只要不改變差異基准(通過創建另一個FULL備份NON COPY_ONLY ;請參見msdb.dbo.backupset ),就可以了。

[2]不需要日志傳送在FULL備份之后應用/還原DIFF備份。 恢復FULL后,足以啟動/重新啟動日志傳送:啟動所有三個作業: LS_?_BackupLS_?_CopyLS_?_Restore 我還要檢查是否有維護計划將進行日志備份-應該將其禁用(沒關系,因為現在LS將負責日志備份)。

[3] FULL還原后, 如果備份鏈沒有中斷 (未應用任何DIFF ),則可以應用LOG備份(* .trn):

  • 這意味着在FULL備份和LOG備份之間沒有其他FULL備份( NON COPY_ONLY ),並且

  • 我們都LOG之間的備份FULL備份與當前LOG備份。

示例:這將創建以下備份: F D1 L1 L2 ,然后將按照以下順序恢復: F L1 L2 在示例的最后,您將看到dbo.tab1具有所有行。

USE master;
GO
CREATE DATABASE CocoJambo;
GO
ALTER DATABASE CocoJambo 
SET RECOVERY FULL
GO
USE CocoJambo
GO
CREATE TABLE dbo.tab1(id int not null primary key)
go
insert dbo.tab1(id) values (1)
go
BACKUP DATABASE CocoJambo TO DISK = 'CocoJambo_full.bak' WITH STATS = 25 -- FULL backup
GO
insert dbo.tab1(id) values (2)
go
BACKUP DATABASE CocoJambo TO DISK = 'CocoJambo_diff_01.bak' WITH STATS = 25, DIFFERENTIAL -- DIFF backup
GO
BACKUP LOG CocoJambo TO DISK = 'CocoJambo_log_01.trn' WITH STATS = 25
GO
insert dbo.tab1(id) values (3)
go
BACKUP LOG CocoJambo TO DISK = 'CocoJambo_log_02.trn' WITH STATS = 25
GO

-- RESTORE
USE master 
GO
DROP DATABASE CocoJambo
GO
RESTORE DATABASE CocoJambo_restored 
FROM DISK = 'CocoJambo_full.bak' -- FULL backup restore
WITH 
STATS = 25, 
NORECOVERY -- To allow future diff/log restores
GO
/*
25 percent processed.
51 percent processed.
77 percent processed.
100 percent processed.
Processed 336 pages for database 'CocoJambo_restored', file 'CocoJambo' on file 1.
Processed 7 pages for database 'CocoJambo_restored', file 'CocoJambo_log' on file 1.
RESTORE DATABASE successfully processed 343 pages in 0.366 seconds (7.310 MB/sec).
*/

RESTORE LOG CocoJambo_restored 
FROM DISK = 'CocoJambo_log_01.trn'
WITH STATS = 25, NORECOVERY
/*
76 percent processed.
100 percent processed.
Processed 0 pages for database 'CocoJambo_restored', file 'CocoJambo' on file 1.
Processed 11 pages for database 'CocoJambo_restored', file 'CocoJambo_log' on file 1.
RESTORE LOG successfully processed 11 pages in 0.109 seconds (0.752 MB/sec).
*/

RESTORE LOG CocoJambo_restored 
FROM DISK = 'CocoJambo_log_02.trn'
WITH STATS = 25, NORECOVERY
/*
100 percent processed.
Processed 0 pages for database 'CocoJambo_restored', file 'CocoJambo' on file 1.
Processed 2 pages for database 'CocoJambo_restored', file 'CocoJambo_log' on file 1.
RESTORE LOG successfully processed 2 pages in 0.083 seconds (0.188 MB/sec).
*/

RESTORE DATABASE CocoJambo_restored 
WITH RECOVERY -- Bring db ONLINE r/w
/*
RESTORE DATABASE successfully processed 0 pages in 1.385 seconds (0.000 MB/sec).
*/

SELECT * FROM CocoJambo_restored.dbo.tab1
/*
id
-----------
1
2
3

(3 row(s) affected)
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM