SQL Server三種常見備份


發現一個關於sqlserver備份的教程鏈接,里面有很多很好的圖

https://sqlbak.com/academy/

 

摘要

本期月報是SQL Server數據庫備份技術系列文章的開篇,介紹三種常見的SQL Server備份方法的工作方式、使用T-SQL語句和使用SSMS IDE創建備份集三個層面,介紹SQL Server的三種常見備份的工作原理和使用方法。三種常見的備份包括:

數據庫完全備份(Full Backup)

數據庫日志備份(Transaction Log Backup)

數據庫差異備份(Differential Backup)

 

Full Backup

Full Backup(完全備份)是SQL Server所有備份類型中,最為簡單、最基礎的數據庫備份方法,它提供了某個數據庫在備份時間點的完整拷貝。但是,它僅支持還原到數據庫備份成功結束的時間點,即不支持任意時間點還原操作。

Full Backup工作方式

以上是Full Backup是什么的解釋,那么接下來,我們通過一張圖和案例來解釋Full Backup的工作原理。 01.png

從這張圖和相應的解釋分析來看,數據庫完全備份工作原理應該是非常簡單的,它就是數據庫在備份時間點對所有數據的一個完整拷貝。當然在現實的生產環境中,事務的操作遠比這個復雜,因此,在這個圖里面有兩個非常重要的點沒有展示出來,那就是:

備份操作可能會導致I/O變慢:由於數據庫備份是一個I/O密集型操作,所以在數據庫備份過程中,可能會導致數據庫的I/O操作變慢。

全備份過程中,數據庫的事務日志不能夠被截斷:對於具有大事務頻繁操作的數據庫,可能會導致事務日志空間一直不停頻繁增長,直到占滿所有的磁盤剩余空間,這個場景在阿里雲RDS SQL產品中有很多的客戶都遇到過。其中之一解決方法就需要依賴於我們后面要談到的事務日志備份技術。

 

T-SQL創建Full Backup

使用T-SQL語句來完成數據庫的完全備份,使用BACKUP DATABASE語句即可,如下,對AdventureWorks2008R2數據庫進行一個完全備份:

  1.  
    USE master
     
    GO
     
    BACKUP DATABASE [AdventureWorks2008R2]
     
    TO DISK = 'C:\Temp\AdventureWorks2008R2_20171112_FULL.bak' WITH COMPRESSION, INIT, STATS = 5;
     
    GO

     

SSMS IDE創建Full Backup

除了使用T-SQL語句創建數據庫的完全備份外,我們還可以使用SSMS IDE界面操作來完成,方法: 右鍵點擊想要備份的數據庫 => Tasks => Backup => 選擇FULL Backup Type => 選擇Disk 做為備份文件存儲 => 點擊Add 添加備份文件 => 選擇你需要存儲備份文件的目錄 => 輸入備份文件名,如下圖兩張圖展示。 02.png

Back up Database設置界面

03.png

Transaction Log Backup

SQL Server數據庫完全備份是數據庫的完整拷貝,所以備份文件空間占用相對較大,加之可能會在備份過程中導致事務日志一直不斷增長。事務日志備份可以很好的解決這個問題,因為:事務日志備份記錄了數據庫從上一次日志備份到當前時間內的所有事務提交的數據變更,它可以配合數據庫完全備份和差異備份(可選)來實現時間點的還原。當日志備份操作成功以后,事務日志文件會被截斷,事務日志空間將會被重復循環利用,以此來解決完全備份過程中事務日志文件一致不停增長的問題,因此我們最好能夠周期性對數據庫進行事務日志備份,以此來控制事務日志文件的大小。但是這里需要有一個前提是數據庫必須是FULL恢復模式,SIMPLE恢復模式的數據庫不支持事務日志的備份,當然就無法實現時間點的還原。請使用下面的語句將數據庫修改為FULL恢復模式,比如針對AdventureWorks2008R2數據庫:

 
USE [master]
 
GO
 
ALTER DATABASE [AdventureWorks2008R2] SET RECOVERY FULL WITH NO_WAIT
 
GO

 

Transaction Log Backup工作方式            

事務日志備份與數據完全備份工作方式截然不同,它不是數據庫的一個完整拷貝,而是從上一次日志備份到當前時間內所有已提交的事務數據變更。用一張圖來解釋事務日志備份的工作方式:

04.png

從這張圖我們看到,每個事務日志備份文件中包含的是已經完成的事務變更,兩次事務日志備份中存放的是完全不同的變更數據。而每一次事務日志備份成功以后,事務日志空間可以被成功回收,重復利用,達到了解決數據庫完全備份過程中事務日志一致不斷增長的問題。

 

T-SQL創建事務日志備份

使用T-SQL語句來創建事務日志的備份方法如下:

USE Master
 
GO
 
BACKUP LOG [AdventureWorks2008R2]
 
TO DISK = N'C:\temp\AdventureWorks2008R2_log_201711122201.trn' with compression,stats=1;
 
GO
 
BACKUP LOG [AdventureWorks2008R2]
 
TO DISK = N'C:\temp\AdventureWorks2008R2_log_201711122202.trn' with compression,stats=1;
 
GO
 
BACKUP LOG [AdventureWorks2008R2]
 
TO DISK = N'C:\temp\AdventureWorks2008R2_log_201711122203.trn' with compression,stats=1;
 
GO

 

SSMS IDE創建事務日志備份

使用SSMS IDE創建事務日志備份的方法: 右鍵點擊想要創建事務日志備份的數據庫 => Tasks => Backup => 選擇Transaction Log Backup Type => 選擇Disk 做為備份文件存儲 => 點擊Add 添加備份文件 => 選擇你需要存儲備份文件的目錄 => 輸入備份文件名,如下圖展示:

05.png

事務日志備份鏈

由於數據庫完全備份是時間點數據的完整拷貝,每個數據庫完整備份相互獨立,而多個事務日志備份是通過事務日志鏈條連接在一起,事務日志鏈起點於完全備份,SQL Server中的每一個事務日志備份文件都擁有自己的FirstLSN和LastLSN,FirstLSN用於指向前一個事務日志備份文件的LastLSN;而LastLSN指向下一個日志的FirstLSN,以此來建立這種鏈接關系。這種鏈接關系決定了事務日志備份文件還原的先后順序。當然,如果其中任何一個事務日志備份文件丟失或者破壞,都會導致無法恢復整個事務日志鏈,僅可能恢復到你擁有的事務日志鏈條的最后一個。事務日志備份鏈條的關系如下圖所示:

06.png

我們使用前面“T-SQL創建事務日志備份”創建的事務日志鏈,使用RESTORE HEADERONLY方法來查看事務日志鏈的關系:

 
USE Master
 
GO
 
RESTORE HEADERONLY FROM DISK = N'C:\temp\AdventureWorks2008R2_log_201711122201.trn';
 
RESTORE HEADERONLY FROM DISK = N'C:\temp\AdventureWorks2008R2_log_201711122202.trn';
 
RESTORE HEADERONLY FROM DISK = N'C:\temp\AdventureWorks2008R2_log_201711122203.trn';

 

查詢結果如下:

07.png

這里有一個問題是:為了防止數據庫事務日志一直不斷的增長,而我們又不想每次都對數據庫做完全備份,那么我們就必須對數據庫事務日志做周期性的日志備份,比如:5分鍾甚至更短,以此來降低數據丟失的風險,以此推算每天會產生24 * 12 = 288個事務日志備份,這樣勢必會導致事務日志恢復鏈條過長,拉長恢復時間,增大了數據庫還原時間(RTO)。這個問題如何解決就是我們下面章節要分享到的差異備份技術。

 

Differential Backup

事務日志備份會導致數據庫還原鏈條過長的問題,而差異備份就是來解決事務日志備份的這個問題的。差異備份是備份從上一次數據庫全量備份以來的所有變更的數據頁,所以差異備份相對於數據庫完全備份而言往往數據空間占用會小很多。因此,備份的效率更高,還原的速度更快,可以大大提升我們災難恢復的能力。

 

Differential Backup工作方式

我們還是從一張圖來了解數據庫差異備份的工作方式:

08.png

 

T-SQL創建差異備份

 

使用T-SQL語句創建差異備份的方法如下:

 
USE master
 
GO
 
BACKUP DATABASE [AdventureWorks2008R2]
 
TO DISK = 'C:\Temp\AdventureWorks2008R2_20171112_diff.bak' WITH DIFFERENTIAL
 
GO

 

SSMS創建差異備份

使用SSMS IDE創建差異備份的方法: 右鍵點擊想要創建事務日志備份的數據庫 => Tasks => Backup => 選擇Differential Backup Type => 選擇Disk 做為備份文件存儲 => 點擊Add 添加備份文件 => 選擇你需要存儲備份文件的目錄 => 輸入備份文件名,如下圖展示:

09.png

最后總結

本期月報分享了SQL Server三種常見的備份技術的工作方式和備份方法。數據庫完全備份是數據庫備份時間的一個完整拷貝;事務日志備份是上一次日志備份到當前時間的事務日志變更,它解決了數據庫完全備份過程中事務日志一直增長的問題;差異備份上一次完全備份到當前時間的數據變更,它解決了事務日志備份鏈過長的問題。 將SQL Server這三種備份方式的工作方式,優缺點總結如下表格:

10.png

從這個表格,我們知道每種備份有其各自的優缺點,那么我們如何來制定我們的備份和還原策略以達到快速災難恢復的能力呢?這個話題,我們將在下一期月報中進行分享。

 

原文:http://mysql.taobao.org/monthly/2017/11/03/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM