溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQLServer 理解copyonly備份操作

發布時間:2020-07-20 17:29:43 來源:網絡 閱讀:471 作者:zsdnr 欄目:網絡安全

Alwayson在添加數據庫的過程中如果同步首選項選擇的是“完整”,那么就會在主副本上執行copyonly的完整備份和日志備份在輔助副本上執行還原操作,也正是這個操作讓我對copyonly有了新的理解。雖然以前也經常使用copyonly執行完整備份,
但是之前對copyonly的理解存在一點誤區。接下來詳細說明copyonly的操作。

 

 

一、備份測試 

SQLServer 理解copyonly備份操作

CREATE DATABASE city;GOCREATE TABLE city.dbo.test(id INT);---執行完整備份BACKUP DATABASE [city] TO  DISK = N'D:\backup\city_full_20170613.bak' WITH NOFORMAT, NOINIT,  NAME = N'city-完整 數據庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GO--插入1條記錄INSERT INTO city.dbo.test VALUES(1);--執行日志備份1BACKUP LOG [city] TO  DISK = N'D:\backup\city_log1_20170613.trn' WITH NOFORMAT, NOINIT,  NAME = N'city-日志備份1 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GOINSERT INTO city.dbo.test VALUES(2);GO--執行完整copy only備份BACKUP DATABASE [city] TO  DISK = N'D:\backup\city_full_copyonly_20170613.bak' WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'city-完整copyonly 數據庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GOINSERT INTO city.dbo.test VALUES(3);--執行差異備份BACKUP DATABASE [city] TO  DISK = N'D:\backup\city_diff_20170613.bak' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'city-差異 數據庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GOINSERT INTO city.dbo.test VALUES(4);GO--執行日志備份2BACKUP LOG [city] TO  DISK = N'D:\backup\city_log2_20170613.trn' WITH NOFORMAT, NOINIT,  NAME = N'city-日志備份2 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GO

SQLServer 理解copyonly備份操作

 

二、查詢備份

SQLServer 理解copyonly備份操作

SELECT bs.database_name,
bs.name AS BackupName,
bs.first_lsn,--備份集中最早的一條日志記錄的日志序列號bs.last_lsn, --備份集下一條日志記錄的日志序列號bs.database_backup_lsn, --最近的數據庫完整備份的日志序列號bs.checkpoint_lsn,  --重做日志開始的日志序列號bs.is_copy_only,CASE bs.type WHEN 'D' THEN 'FullBack' WHEN 'L' THEN 'LogBack' WHEN 'I' THEN 'DiffBack' ELSE  bs.type END AS BackupType,
bs.backup_start_date,
bs.backup_finish_date,
bs.backup_size,
bs.recovery_modelFROM msdb.dbo.backupset bs 
--INNER JOIN msdb.dbo.backupfile bf ON bs.backup_set_id=bf.backup_set_idWHERE bs.database_name='city'

SQLServer 理解copyonly備份操作

 SQLServer 理解copyonly備份操作

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

1.日志備份以外的備份不會截斷日志

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

2.僅復制完整備份不能作為差異備份的基準備份

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

3.完整、差異、僅復制完整備份會觸發checkpoint

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

4.僅復制完整備份可以作為日志備份的基準備份

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

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

 

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

SQLServer 理解copyonly備份操作

        N     ,  
MOVE N  N,  
MOVE N  N,  NORECOVERY,  NOUNLOAD,  STATS         N     ,  NOUNLOAD,  STATS

SQLServer 理解copyonly備份操作

SQLServer 理解copyonly備份操作

 

三、checkpoint意義

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女