SQL Server三種常見備份

發現一個關於sqlserver備份的教程連接,裏面有不少很好的圖mysql

https://sqlbak.com/academy/sql

 

摘要

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

數據庫徹底備份(Full Backup)sqlserver

數據庫日誌備份(Transaction Log Backup)阿里雲

數據庫差別備份(Differential Backup)spa

 

Full Backup

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

Full Backup工做方式

以上是Full Backup是什麼的解釋,那麼接下來,咱們經過一張圖和案例來解釋Full Backup的工做原理。 01.png日誌

從這張圖和相應的解釋分析來看,數據庫徹底備份工做原理應該是很是簡單的,它就是數據庫在備份時間點對全部數據的一個完整拷貝。固然在現實的生產環境中,事務的操做遠比這個複雜,所以,在這個圖裏面有兩個很是重要的點沒有展現出來,那就是:code

備份操做可能會致使I/O變慢:因爲數據庫備份是一個I/O密集型操做,因此在數據庫備份過程當中,可能會致使數據庫的I/O操做變慢。server

全備份過程當中,數據庫的事務日誌不可以被截斷:對於具備大事務頻繁操做的數據庫,可能會致使事務日誌空間一直不停頻繁增加,直到佔滿全部的磁盤剩餘空間,這個場景在阿里雲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/

相關文章
相關標籤/搜索