SQL Server備份與恢復(fù)- 恢復(fù)模型探究
1、概述
為了創(chuàng)建正確的備份,第一件事是為每個(gè)數(shù)據(jù)庫(kù)設(shè)置正確的恢復(fù)模型。恢復(fù)模型基本上告訴 SQL Server 哪些數(shù)據(jù)要保留在事務(wù)日志文件中以及保留多長(zhǎng)時(shí)間。根據(jù)選擇的恢復(fù)模式,這還將確定您可以執(zhí)行哪些類型的備份以及可以執(zhí)行哪些類型的數(shù)據(jù)庫(kù)還原。
2、三種恢復(fù)模式
您可以選擇的三種恢復(fù)模式是:
- Full
- Simple
- Bulk-Logged
每個(gè)數(shù)據(jù)庫(kù)只能有一個(gè)恢復(fù)模式,但每個(gè)數(shù)據(jù)庫(kù)都可以使用不同的恢復(fù)模式,因此根據(jù)處理和備份需求,您可以為每個(gè)數(shù)據(jù)庫(kù)選擇合適的恢復(fù)模式。唯一的例外是必須使用“簡(jiǎn)單”恢復(fù)模型的 TempDB 數(shù)據(jù)庫(kù)。
此外,可以隨時(shí)更改數(shù)據(jù)庫(kù)恢復(fù)模式,但這會(huì)影響您的備份鏈,因此最好在更改恢復(fù)模式后進(jìn)行完整備份。
可以使用 T-SQL 或 SQL Server Management Studio 更改恢復(fù)模型。以下是有關(guān)如何執(zhí)行此操作的示例。
使用 T-SQL 更改 AdventureWorks 數(shù)據(jù)庫(kù)的“完全”恢復(fù)。
ALTER DATABASE AdventureWorks SET RECOVERY FULL
GO
使用 SSMS 更改 AdventureWorks 數(shù)據(jù)庫(kù)的恢復(fù)模式。
3、完整恢復(fù)模型
完整恢復(fù)模型告訴 SQL Server 將所有事務(wù)數(shù)據(jù)保留在事務(wù)日志中,直到發(fā)生事務(wù)日志備份或事務(wù)日志被截?cái)?。其工作方式是針?duì) SQL Server 發(fā)出的所有事務(wù)首先進(jìn)入事務(wù)日志,然后將數(shù)據(jù)寫(xiě)入適當(dāng)?shù)臄?shù)據(jù)文件。這允許 SQL Server 回滾過(guò)程的每個(gè)步驟,以防出現(xiàn)錯(cuò)誤或事務(wù)由于某種原因被取消。因此,當(dāng)數(shù)據(jù)庫(kù)設(shè)置為“完整”恢復(fù)模式時(shí),由于所有事務(wù)都已保存,因此您可以進(jìn)行時(shí)間點(diǎn)恢復(fù),這意味著您可以恢復(fù)到事務(wù)發(fā)生之前的某個(gè)點(diǎn),就像意外刪除所有事務(wù)一樣表中的數(shù)據(jù)。
完整恢復(fù)模式是最完整的恢復(fù)模式,只要所有備份文件可用且可讀,您就可以將所有數(shù)據(jù)恢復(fù)到任何時(shí)間點(diǎn)。使用此模型,所有操作都被完整記錄,這意味著您可以將數(shù)據(jù)庫(kù)恢復(fù)到任何點(diǎn)。此外,如果數(shù)據(jù)庫(kù)設(shè)置為完全恢復(fù)模式,您還需要發(fā)出事務(wù)日志備份,否則您的數(shù)據(jù)庫(kù)事務(wù)日志將永遠(yuǎn)持續(xù)增長(zhǎng)。
以下是您可能選擇此恢復(fù)模式的一些原因:
- 數(shù)據(jù)至關(guān)重要,您希望最大限度地減少數(shù)據(jù)丟失。
- 您需要能夠進(jìn)行時(shí)間點(diǎn)恢復(fù)。
- 您正在使用數(shù)據(jù)庫(kù)鏡像
- 您正在使用 Always On 可用性組
當(dāng)數(shù)據(jù)處于“完整”恢復(fù)模式時(shí)可以運(yùn)行的備份類型:
- 完成備份
- 差異備份
- 文件和/或文件組備份
- 部分備份
- 僅復(fù)制備份
- 事務(wù)日志備份
使用 T-SQL 設(shè)置 SQL Server 完整恢復(fù)模型
ALTER DATABASE dbName SET RECOVERY recoveryOption
GO
示例:將 AdventureWorks 數(shù)據(jù)庫(kù)更改為“完整”恢復(fù)模式
ALTER DATABASE AdventureWorks SET RECOVERY FULL
GO
使用 Management Studio 設(shè)置 SQL Server 完整恢復(fù)模式
- 右鍵單擊數(shù)據(jù)庫(kù)名稱并選擇屬性
- 轉(zhuǎn)到選項(xiàng)頁(yè)面
- 在恢復(fù)模式下選擇“完整”
- 點(diǎn)擊“確定”保存
4、簡(jiǎn)單恢復(fù)模型
它為您提供了一個(gè)簡(jiǎn)單的備份,可用于在發(fā)生故障或需要將數(shù)據(jù)庫(kù)恢復(fù)到另一臺(tái)服務(wù)器時(shí)替換整個(gè)數(shù)據(jù)庫(kù)。使用這種恢復(fù)模式,您可以進(jìn)行完整備份(整個(gè)副本)或差異備份(自上次完整備份以來(lái)的任何更改)。使用此恢復(fù)模式,您將面臨自上次備份完成以來(lái)的任何故障,因?yàn)槟荒軐?shù)據(jù)恢復(fù)到備份發(fā)生的時(shí)間點(diǎn)。
“簡(jiǎn)單”恢復(fù)模型是 SQL Server 最基本的恢復(fù)模型。每個(gè)事務(wù)仍然寫(xiě)入事務(wù)日志,但是一旦事務(wù)完成并且數(shù)據(jù)已寫(xiě)入數(shù)據(jù)文件,事務(wù)日志文件中使用的空間可以被新事務(wù)重用。由于此空間被重復(fù)使用,因此無(wú)法進(jìn)行時(shí)間點(diǎn)恢復(fù),因此最近的還原點(diǎn)將是完整備份或已完成的最新差異備份。此外,由于事務(wù)日志中的空間可以重復(fù)使用,事務(wù)日志不會(huì)像“完全”恢復(fù)模型中提到的那樣永遠(yuǎn)增長(zhǎng)。
以下是您可能選擇此恢復(fù)模式的一些原因:
- 您的數(shù)據(jù)并不重要,可以輕松地重新創(chuàng)建
- 該數(shù)據(jù)庫(kù)僅用于測(cè)試或開(kāi)發(fā)
- 數(shù)據(jù)是靜態(tài)的,不會(huì)改變
- 自上次備份以來(lái)丟失任何或所有事務(wù)不是問(wèn)題
- 數(shù)據(jù)是派生的,可以很容易地重新創(chuàng)建
當(dāng)數(shù)據(jù)處于“簡(jiǎn)單”恢復(fù)模式時(shí)可以運(yùn)行的備份類型:
- 完成備份
- 差異備份
- 文件和/或文件組備份
- 部分備份
- 僅復(fù)制備份
使用 T-SQL 設(shè)置 SQL Server 簡(jiǎn)單恢復(fù)模型
ALTER DATABASE dbName SET RECOVERY recoveryOption
GO
示例:將 AdventureWorks 數(shù)據(jù)庫(kù)更改為“簡(jiǎn)單”恢復(fù)模式
ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE
GO
使用 Management Studio 設(shè)置 SQL Server 簡(jiǎn)單恢復(fù)模型
- 右鍵單擊數(shù)據(jù)庫(kù)名稱并選擇屬性
- 轉(zhuǎn)到選項(xiàng)頁(yè)面
- 在恢復(fù)模式下選擇“簡(jiǎn)單”
- 點(diǎn)擊“確定”保存
5、大容量日志恢復(fù)模型
在此模型中,某些批量操作(例如 BULK INSERT、CREATE INDEX、SELECT INTO 等)并未完全記錄在事務(wù)日志中,因此不會(huì)在事務(wù)日志中占用太多空間。
使用“批量記錄”恢復(fù)模型的優(yōu)點(diǎn)是,如果您正在執(zhí)行大量批量操作,您的事務(wù)日志不會(huì)變得那么大,并且只要您的最后一個(gè)事務(wù)日志備份沒(méi)有,它仍然允許您進(jìn)行時(shí)間點(diǎn)恢復(fù)包括批量操作。如果未運(yùn)行批量操作,則此恢復(fù)模式與完全恢復(fù)模式的工作方式相同。需要注意的一點(diǎn)是,如果您使用這種恢復(fù)模式,您還需要發(fā)出事務(wù)日志備份,否則您的數(shù)據(jù)庫(kù)事務(wù)日志將繼續(xù)增長(zhǎng)。
以下是您可能選擇此恢復(fù)模式的一些原因:
- 數(shù)據(jù)很關(guān)鍵,您希望最大程度地減少數(shù)據(jù)丟失,但又不想記錄大批量操作
- 與正常處理相比,批量操作在不同時(shí)間完成。
- 您仍然希望能夠恢復(fù)到某個(gè)時(shí)間點(diǎn)
當(dāng)數(shù)據(jù)處于“批量記錄”恢復(fù)模式時(shí),您可以運(yùn)行的備份類型:
- 完成備份
- 差異備份
- 文件和/或文件組備份
- 部分備份
- 僅復(fù)制備份
- 事務(wù)日志備份
使用 T-SQL 設(shè)置 SQL Server 大容量日志恢復(fù)模型
ALTER DATABASE dbName SET RECOVERY recoveryOption
GO
示例:將 AdventureWorks 數(shù)據(jù)庫(kù)更改為“批量記錄”恢復(fù)模式
ALTER DATABASE AdventureWorks SET RECOVERY BULK_LOGGED
GO
使用 Management Studio 設(shè)置 SQL Server 批量日志恢復(fù)模型
- 右鍵單擊數(shù)據(jù)庫(kù)名稱并選擇屬性
- 轉(zhuǎn)到選項(xiàng)頁(yè)面
- 在恢復(fù)模式下選擇“批量記錄”
- 點(diǎn)擊“確定”保存