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