1. 首頁
  2. 資料庫作業系統

備份和恢復資料庫的知識重點

備份和恢復資料庫的知識重點

15.1.1 概述

1、備份資料庫的作用

(1) 備份資料庫就是將資料庫資料和與資料庫的正常執行有關的資訊儲存起來,以備恢復資料庫時使用,其主要目的是為了防止資料的丟失。

(2) 另一作用是作為資料轉移的一種方式;

2、備份時間

(1) 對於系統資料庫應進行了修改後立即備份,對於使用者資料庫一般採用定期備份;

(2) 備份資料庫要選在資料庫操作少的時間進行,這樣可減少對備份以及資料操作效能的影響。

15.1.2 備份裝置

1、 SQL Server將備份資料庫的場所稱為備份裝置,它支援將資料庫備份到磁帶或磁碟上;

2、 備份方式有兩種:

(1) 先建立備份裝置,然後將資料庫備份到備份裝置上(永久備份裝置);

(2) 直接將資料庫備份到物理檔案上(臨時備份裝置)。

15.1.3 建立備份裝置

備份裝置在作業系統一級實際上是物理檔案,只是備份裝置必須要先建立好,然後才能使用

1、 用企業管理器建立備份裝置

2、 使用系統儲存過程建立備份裝置

sp_addumpdevice[@devtype=]’device_type’,[@logicalname=]’logical_name’,

[@physicalname=]’physical_name’

其中:

(1)[@devtype=]’device_type’:為備份裝置的型別,可選下列之一:

(A) Disk:使用磁碟檔案作為備份裝置;

(B) Pipe:使用命名管道作為備份裝置;

(C) Tape:使用磁帶裝置。

(2)[@logicalname=]’logical_name’:備份裝置的邏輯名稱,該邏輯名稱用在BACKUP和RESTORE語句中;

(3)[@physicalname=]’physical_name’:備份裝置的物理名稱。

15.1.4 備份型別

1、 完全備份

是將資料庫中的全部資訊進行備份,它是恢復的基線,在進行完全備份時,不但備份資料庫的資料檔案、日誌檔案,而且還備份檔案的儲存位置資訊以及資料庫中的全部物件及相關資訊;

備份資料庫是要消耗時間的,在進行備份資料庫時,使用者可以訪問資料庫,它將不影響資料庫的備份,並且還可以將備份過程中發生的活動全部備份下來。

2、差異備份

是備份從最近的完全備份之後對資料庫所作的修改,它以完全備份為基點,備份變化了的資料檔案和日誌檔案以及資料庫中其他被修改的內容,

在差異備份過程中,也允許使用者訪問資料庫和對其操作,且在備份過程中的活動也一起備份下來;

3、事務日誌備份

(1) 是備份從上次備份之後的日誌記錄,在預設情況下,事務日誌備份完成後,要截斷日誌。

(2) 事務日誌記錄了使用者對資料庫進行的修改操作,為了避免記錄越來越多,必須定期地將日誌記錄中不需要的部分清除掉,這種過程叫截斷日誌,備份日誌是截斷日誌的一種方法;

(3) 如果要進行事務日誌備份,必須將資料庫的故障還原模型設定為“完全”方式或“大容量日誌記錄的”方式,因為在預設情況下的“簡單”方式,只能進行完全備份和差異備份,不能進行事務日誌備份,因為在該模式下系統自動定期將事務日誌中不活動的部分清除。

(4) 如要對資料庫進行事務日誌備份,則必須先設定資料庫的.故障還原模型,否則在恢復時就會出錯。這是因為不同的還原模型對日誌的記錄和維護方式是不一樣的。

15.1.5 備份策略

1、完全備份

完全備份策略適合於資料庫資料不是很大,而且資料更改不是很頻繁的情況。可以幾天或幾周進行一次;

2、完全備份+日誌備份

如不允許丟失太多資料,且不希望經常進行完全備份;

3、完全備份+差異備份+日誌備份

該策略的好處是備份和恢復的速度都比較快,出現故障時丟失的資料也比較少;

15.1.6 實現備份

1、 使用企業管理器備份資料庫

2、 使用Transact-SQL語句備份資料庫

(1) 備份資料庫的基本語法:

BACKUP DATABASE 資料庫名

TO {}|{DISK|TAPE}={‘物理備份檔名’}

[WITH [DIFFERENTIAL][[,]{INIT|NOINIT}]]

其中:

(A):將資料庫備份到已建立好的備份裝置名上;

(B)DISK|TAPE:將資料庫備份到磁碟或磁帶;

(D) DIFFERENTIAL:進行差異備份;

(E) INIT:本次備份資料庫將重寫備份裝置,即覆蓋掉本裝置上以前進行的所有備份;

(F) NOINIT:本次備份資料庫將追加到備份裝置上,即不覆蓋。

(2) 備份資料庫日誌的基本語法:

BACKUP LOG 資料庫名

TO {}|{DISK|TAPE}={‘物理備份檔名’}

[WITH [{INIT|NOINIT}] [{[,]NO_LOG|TRUNCATE_