天天看點

SQLServer 了解copyonly備份操作

标簽:MSSQL/日志截斷

Alwayson在添加資料庫的過程中如果同步首選項選擇的是“完整”,那麼就會在主副本上執行copyonly的完整備份和日志備份在輔助副本上執行還原操作,也正是這個操作讓我對copyonly有了新的了解。雖然以前也經常使用copyonly執行完整備份,

但是之前對copyonly的了解存在一點誤區。接下來詳細說明copyonly的操作。

SQLServer 了解copyonly備份操作
SQLServer 了解copyonly備份操作
SQLServer 了解copyonly備份操作
SQLServer 了解copyonly備份操作
SQLServer 了解copyonly備份操作

上圖中用三種顔色的框框出了四個比較重要的知識點:

從最左邊的紅框标志的兩次日志備份的first_lsn和last_lsn可以看到整個兩次日志備份的lsn是連續的從‘45000000016800179’-‘45000000038400001’,兩次日志備份的lsn涵蓋了所有備份的lsn。也就是中間的copyonly完整備份和差異備份不會截斷日志(當然如果中間還存在完整備份同樣不會截斷日志,大家可以去試試)

從中間的截框“database_backup_lsn”列可以看到,所有的後面的備份都基于第一次完整備份作為基準備份。

最後一個截框“checkpoint_lsn”可以看到除了日志備份,其它的三種備份都會觸發checkpoint,大家也通過查詢buffer檢視is_modify字段是否被修改來判斷。

這個在上面的截圖中沒有展現出來,但是可以看到日志備份2的lsn是涵蓋了第三次僅複制備份的lsn,僅複制完整備份其實可以了解成資料庫在一個時間點的快照,而日志備份是記錄所有更改的日志操作,可以用來執行redo。是以如果将第3次僅複制完整備份+第5次日志備份是可以還原所有的資料。

第3次僅複制完整備份+第5次日志備份它=(第1次完整備份+第4次差異備份+第5次日志備份)=(第1次完整備份+第2次日志備份+第5次日志備份)

執行第3次僅複制完整備份+第5次日志備份

SQLServer 了解copyonly備份操作
SQLServer 了解copyonly備份操作
SQLServer 了解copyonly備份操作

由于資料在磁盤是散列存儲,如果每次修改都去修改磁盤勢必會造成很多的IO,是以引入了checkpoint重新整理機制,checkpoint根據某些觸發條件将buffer中的髒頁寫入磁盤(也稱作持久化操作)。比如完整備份、僅複制完整備份、差異備份、當日志的修改到達一定的比例、重新開機服務等都會觸發checkpoint,當然checkpoint并不是sqlserver獨有的功能,在其他的關系型資料庫比如mysql都存在chckpoint機制;mysql中還存在每秒背景線程執行checkpoint操作,但是貌似sqlserver不會,checkpoint涉及的知識點很多這裡隻是稍微介紹!

其實上面的備份測試中在中間在加入一次完整備份就更加完美了,但是如果大家了解備份的原理也是一樣可以了解的。

本文轉自pursuer.chen(陳敏華)部落格園部落格,原文連結:http://www.cnblogs.com/chenmh/p/7002711.html,如需轉載請自行聯系原作者