SQL Server 備份的備份類型探究
一、背景描述
我們知道數(shù)據(jù)數(shù)據(jù)庫(kù)的恢復(fù)模型決定了可以執(zhí)行哪些類型的備份。在本節(jié)中,我們將討論每個(gè)備份選項(xiàng)以及如何使用 SSMS 和 T-SQL 執(zhí)行這些備份。
在本文中我們討論如下內(nèi)容:
- 完整備份
- 差異備份
- 文件備份
- 文件組備份
- 部分備份
- 僅復(fù)制備份
- 鏡像備份
- 事務(wù)日志備份
二、SQLSERVER備份類型
1、SQL Server 完整備份
最常見的 SQL Server 備份類型是完整備份,也稱為數(shù)據(jù)庫(kù)備份。這些備份會(huì)創(chuàng)建數(shù)據(jù)庫(kù)的完整備份以及事務(wù)日志的一部分,因此可以恢復(fù)數(shù)據(jù)庫(kù)。這是最簡(jiǎn)單的數(shù)據(jù)庫(kù)恢復(fù)形式,因?yàn)樗袃?nèi)容都包含在一個(gè)備份中。
創(chuàng)建完整備份
可以使用 T-SQL 或使用 SSMS 完成完整備份。以下示例向您展示如何創(chuàng)建完整備份。
可以使用 T-SQL 或使用 SSMS 完成完整備份。以下示例向您展示如何創(chuàng)建完整備份。
創(chuàng)建完整的 SQL Server 數(shù)據(jù)庫(kù)備份到一個(gè)磁盤文件
T-SQL
這將創(chuàng)建 AdventureWorks 數(shù)據(jù)庫(kù)的完整備份并將備份內(nèi)容寫入文件“C:\AdventureWorks.BAK”。.BAK 擴(kuò)展名通常用于標(biāo)識(shí)備份是完整的數(shù)據(jù)庫(kù)備份。
BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdventureWorks.BAK'
GO
SQL Server Management Studio
- 右鍵單擊數(shù)據(jù)庫(kù)名稱。
- 選擇任務(wù) > 備份。
- 選擇“完整”作為備份類型。
- 選擇“磁盤”作為目標(biāo)。
- 單擊“添加...”以添加備份文件并鍵入“C:\AdventureWorks.BAK”并單擊“確定”。
- 再次單擊“確定”以創(chuàng)建備份。
2、SQL Server 事務(wù)日志備份
如果您的數(shù)據(jù)庫(kù)設(shè)置為“完整”或“批量記錄”恢復(fù)模式,那么您將能夠進(jìn)行“事務(wù)日志”備份。通過事務(wù)日志備份和完整備份,您可以進(jìn)行時(shí)間點(diǎn)恢復(fù),因此如果有人意外刪除了數(shù)據(jù)庫(kù)中的所有數(shù)據(jù),您可以將數(shù)據(jù)庫(kù)恢復(fù)到刪除發(fā)生之前的時(shí)間點(diǎn)。唯一需要注意的是,如果您的數(shù)據(jù)庫(kù)設(shè)置為“批量記錄”恢復(fù)模式并做出批量操作,您將需要還原整個(gè)事務(wù)日志,因此您無法使用事務(wù)日志進(jìn)行時(shí)間點(diǎn)還原包含批量記錄操作的備份。
事務(wù)日志備份允許您備份事務(wù)日志。事務(wù)日志備份時(shí),事務(wù)日志內(nèi)的空間可以被其他進(jìn)程重用。如果未進(jìn)行事務(wù)日志備份并且數(shù)據(jù)庫(kù)未使用簡(jiǎn)單恢復(fù)模式,則事務(wù)日志將繼續(xù)增長(zhǎng)。
可以使用 T-SQL 或使用 SSMS 完成事務(wù)日志備份。以下示例向您展示如何創(chuàng)建事務(wù)日志備份。
創(chuàng)建 SQL Server 事務(wù)日志備份到一個(gè)磁盤文件
T-SQL
這將創(chuàng)建 AdventureWorks 數(shù)據(jù)庫(kù)的事務(wù)日志備份并將備份內(nèi)容寫入文件“C:\AdventureWorks.TRN”。.TRN 擴(kuò)展名通常用于標(biāo)識(shí)備份是事務(wù)日志備份。
BACKUP LOG AdventureWorks TO DISK = 'C:\AdventureWorks.TRN'
GO
SQL Server Management Studio
- 右鍵單擊數(shù)據(jù)庫(kù)名稱。
- 選擇任務(wù) > 備份。
- 選擇“事務(wù)日志”作為備份類型。
- 選擇“磁盤”作為目標(biāo)。
- 單擊“添加...”以添加備份文件并鍵入“C:\AdventureWorks.TRN”并單擊“確定”。
- 再次單擊“確定”以創(chuàng)建備份。
3、差異備份
“差異”備份是對(duì)自上次“完整”備份創(chuàng)建以來已更改的任何范圍的備份。差異備份的工作方式是備份自上次完整備份以來發(fā)生更改的所有擴(kuò)展區(qū)。一個(gè)extent由8個(gè)8KB的page組成,所以一個(gè)extent就是64KB的數(shù)據(jù)。每次更改任何數(shù)據(jù)時(shí),都會(huì)打開一個(gè)標(biāo)志,以讓 SQL Server 知道如果創(chuàng)建了“差異”備份,則它應(yīng)該包括來自此范圍的數(shù)據(jù)。當(dāng)進(jìn)行“完整”備份時(shí),這些標(biāo)志將關(guān)閉。
因此,如果您先進(jìn)行完整備份,然后再進(jìn)行差異備份,則差異備份將僅包含已更改的擴(kuò)展區(qū)。如果您等待一段時(shí)間并進(jìn)行另一次差異備份,則此新的差異備份將包含自上次完整備份以來已更改的所有擴(kuò)展區(qū)。每次創(chuàng)建新的差異備份時(shí),它將包含自上次完整備份以來更改的每個(gè)擴(kuò)展區(qū)。當(dāng)你去恢復(fù)你的數(shù)據(jù)庫(kù)時(shí),要恢復(fù)到最新的時(shí)間你只需要恢復(fù)完整備份和最近的差異備份。所有其他差異備份都可以忽略。
如果您的數(shù)據(jù)庫(kù)處于簡(jiǎn)單恢復(fù)模式,您仍然可以使用完整備份和差異備份。這不允許您進(jìn)行時(shí)間點(diǎn)恢復(fù),但如果您只有完整備份,它將允許您將數(shù)據(jù)恢復(fù)變更的當(dāng)前的時(shí)間點(diǎn)。
如果您的數(shù)據(jù)庫(kù)處于完整或批量日志恢復(fù)模式,您還可以使用差異備份來消除需要恢復(fù)的事務(wù)日志的數(shù)量。由于差異將備份自上次完整備份以來的所有擴(kuò)展區(qū),因此在還原時(shí)您可以還原完整備份、最近的差異備份,然后是在最近的差異備份之后創(chuàng)建的任何事務(wù)日志備份。這減少了需要恢復(fù)的文件數(shù)量。
將 SQL Server 差異備份創(chuàng)建到一個(gè)磁盤文件。
T-SQL
BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdventureWorks.DIF' WITH DIFFERENTIAL
GO
SQL Server Management Studio
- 右鍵單擊數(shù)據(jù)庫(kù)名稱。
- 選擇任務(wù) > 備份。
- 選擇“差異”作為備份類型。
- 選擇“磁盤”作為目標(biāo)。
- 單擊“添加...”以添加備份文件并鍵入“C:\AdventureWorks.DIF”并單擊“確定”。
- 再次單擊“確定”以創(chuàng)建備份。
4、SQL Server 文件備份
備份數(shù)據(jù)庫(kù)的另一個(gè)選項(xiàng)是使用“文件”備份。這使您可以獨(dú)立備份每個(gè)文件,而不必備份整個(gè)數(shù)據(jù)庫(kù)。這僅在您為數(shù)據(jù)庫(kù)創(chuàng)建了多個(gè)數(shù)據(jù)文件時(shí)才相關(guān)。這種類型的備份的一個(gè)原因是如果您有一個(gè)非常大的文件并且需要單獨(dú)備份它們。在大多數(shù)情況下,您可能只有一個(gè)數(shù)據(jù)文件,因此該選項(xiàng)不相關(guān)。
如上所述,您可以單獨(dú)備份每個(gè)數(shù)據(jù)文件。如果您有一個(gè)非常大的數(shù)據(jù)庫(kù)并且有很大的數(shù)據(jù)文件,則此選項(xiàng)可能是相關(guān)的。
可以使用 T-SQL 或使用 SSMS 完成文件備份。
創(chuàng)建 TestBackup 數(shù)據(jù)庫(kù)的 SQL Server 文件備份
對(duì)于此示例,我創(chuàng)建了一個(gè)名為 TestBackup 的新數(shù)據(jù)庫(kù),其中包含兩個(gè)數(shù)據(jù)文件和一個(gè)日志文件。這兩個(gè)數(shù)據(jù)文件稱為“TestBackup”和“TestBackup2”。下面的代碼顯示了如何分別備份每個(gè)文件。
T-SQL
BACKUP DATABASE TestBackup FILE = 'TestBackup'
TO DISK = 'C:\TestBackup_TestBackup.FIL'
GO
BACKUP DATABASE TestBackup FILE = 'TestBackup2'
TO DISK = 'C:\TestBackup_TestBackup2.FIL'
GO
SQL Server 管理工作室
- 右鍵單擊數(shù)據(jù)庫(kù)名稱。
- 選擇任務(wù) > 備份。
- 選擇“完整”或“差異”作為備份類型。
- 選擇“文件和文件組”。
- 選擇適當(dāng)?shù)奈募?,然后單擊“確定”。
- 選擇“磁盤”作為目標(biāo)。
- 單擊“添加...”以添加備份文件并鍵入“C:\TestBackup_TestBackup.FIL”并單擊“確定”。
- 再次單擊“確定”以創(chuàng)建備份并重復(fù)其他文件。
5、SQL Server 文件組備份
除了進(jìn)行“文件”備份之外,您還可以進(jìn)行“文件組”備份,它允許您備份特定文件組中的所有文件。默認(rèn)情況下,每個(gè)數(shù)據(jù)庫(kù)都有一個(gè) PRIMARY 文件組,該文件組與創(chuàng)建的一個(gè)數(shù)據(jù)文件相關(guān)聯(lián)。您可以選擇創(chuàng)建其他文件組,然后將新數(shù)據(jù)文件放入任何文件組中。在大多數(shù)情況下,您可能只有 PRIMARY 文件組,因此這與主題無關(guān)。
如上所述,您可以單獨(dú)備份每個(gè)文件組。使用文件組備份而不是文件備份的一個(gè)優(yōu)點(diǎn)是您可以創(chuàng)建一個(gè)只讀文件組,這意味著數(shù)據(jù)不會(huì)更改。因此,您可以只備份讀寫文件組,而不是一直備份整個(gè)數(shù)據(jù)庫(kù)。
可以使用 T-SQL 或使用 SSMS 完成文件組備份。
創(chuàng)建 TestBackup 數(shù)據(jù)庫(kù)的 SQL Server 文件組備份
對(duì)于此示例,我創(chuàng)建了一個(gè)名為 TestBackup 的新數(shù)據(jù)庫(kù),其中包含三個(gè)數(shù)據(jù)文件和一個(gè)日志文件。兩個(gè)數(shù)據(jù)文件是 PRIMARY 文件組,一個(gè)文件位于 ReadOnly 文件組中。下面的代碼顯示了如何進(jìn)行文件組備份。
T-SQL
BACKUP DATABASE TestBackup FILEGROUP = 'ReadOnly'
TO DISK = 'C:\TestBackup_ReadOnly.FLG'
GO
SQL Server 管理工作室
- 右鍵單擊數(shù)據(jù)庫(kù)名稱。
- 選擇任務(wù) > 備份。
- 選擇“完整”或“差異”作為備份類型。
- 選擇“文件和文件組”。
- 選擇適當(dāng)?shù)奈募M并單擊“確定”。
- 選擇“磁盤”作為目標(biāo)。
- 單擊“添加...”以添加備份文件并鍵入“C:\TestBackup_ReadOnly.FLG”并單擊“確定”。
- 再次單擊“確定”以創(chuàng)建備份并為其他文件組重復(fù)。
6、SQL Server 部分備份
“部分”備份是 SQL Server 2005 引入的一個(gè)新選項(xiàng)。這允許您備份 PRIMARY 文件組、所有讀寫文件組和任何可選指定的文件。如果您在數(shù)據(jù)庫(kù)中有只讀文件組并且不想一直備份整個(gè)數(shù)據(jù)庫(kù),這是一個(gè)不錯(cuò)的選擇。
可以為完整備份或差異備份發(fā)布部分備份。這不能用于事務(wù)日志備份。如果文件組從只讀更改為讀寫,它將包含在下一個(gè)部分備份中,但如果您將文件組從讀寫更改為只讀,則應(yīng)創(chuàng)建文件組備份,因?yàn)榇宋募M不會(huì)包含在下一個(gè)部分備份中。
只有使用 T-SQL 才能完成部分備份。以下示例向您展示如何創(chuàng)建部分備份。
創(chuàng)建 TestBackup 數(shù)據(jù)庫(kù)的 SQL Server 部分備份
對(duì)于此示例,我創(chuàng)建了一個(gè)名為 TestBackup 的新數(shù)據(jù)庫(kù),其中包含三個(gè)數(shù)據(jù)文件和一個(gè)日志文件。兩個(gè)數(shù)據(jù)文件是 PRIMARY 文件組,一個(gè)文件位于 ReadOnly 文件組中。下面的代碼顯示了如何進(jìn)行部分備份。
T-SQL
創(chuàng)建SQL Server完整部分備份
BACKUP DATABASE TestBackup READ_WRITE_FILEGROUPS
TO DISK = 'C:\TestBackup_Partial.BAK'
GO
創(chuàng)建 SQL Server 差異部分備份
BACKUP DATABASE TestBackup READ_WRITE_FILEGROUPS
TO DISK = 'C:\TestBackup_Partial.DIF'
WITH DIFFERENTIAL
GO
三、小結(jié)
本文討論了SQLSERVER備份類型,對(duì)于理解和掌握SQLSERVER的備份技術(shù),具有很重要的意義。