一. 概述
檔案備份是指備份一個或多個檔案或檔案組中的所有資料。使用檔案備份能夠只還原損壞的檔案,而不用還原資料庫的其餘部份,從而加快恢複速度。例如,如果資料庫由位於不同磁碟上的若干檔案組成,在其中一個磁碟發生故障時,只需還原這個故障磁碟上的檔案,其它磁碟檔案無須還原,這樣縮短還原時間。
在完整復原模式下,一整套完整檔案備份和涵蓋所有檔案備份的記錄備份合起來,等同於一個完整Database Backup。
1.1 檔案備份具有如下優點:
(1)可以迅速還原損壞的檔案。
(2)當超大型資料庫在完整備份下變得難以管理時,檔案備份增加了計劃和ApsaraVideo for Media Processing的靈活性。
1.2 檔案備份具有不足:
(1) 與完整Database Backup相比,檔案備份的主要缺點是管理較為複雜。如果某個損壞的檔案未備份,那麼媒體故障可能會導致無法恢複整個資料庫。因此必須維護一組完整的檔案備份,還必須維護一個或多個記錄備份。
(2) 維護和跟蹤這些完整備份是一種耗時的任務,所需空間會超過完整Database Backup所需的空間。
二. 檔案備份策略
使用檔案備份和記錄備份還原資料庫的操作可能比較複雜,因此最好先執行完整Database Backup,並在第一個檔案備份開始之前,進行記錄備份。在t0建立資料庫後,立即執行完整Database Backupt1,建立第一個完整Database Backup後,便可以開始執行交易記錄備份。交易記錄備份按計劃的間隔時間執行,檔案備份以最適合資料庫業務要求的間隔執行,下面是先備份主檔案組A,再是輔助檔案組B。在完整復原模式下,恢複一個檔案組備份,不但需要恢複檔案組備份本身,還需要依次恢複從上一次完整Database Backup後到恢複的目標時間點為止的所有記錄備份。如果記錄備份數量多,可以考慮再給合差異檔案備份,但這樣備份計劃更加難於管理。
三.檔案還原
當一個大資料庫有若干個檔案和檔案組,如果損壞只是集中在其中一個檔案或檔案組上,sqlserver只要把壞掉的那個資料檔案組重建,肯定可以節約時間。但是資料庫的事務修改是會分布在各個資料檔案上的,如果用備份只恢複其中一個檔案,而其它檔案不恢複,那麼它們的狀態一定會不一致,這樣資料庫是無法使用的,為了使新恢複的檔案能夠自動回復備份以後做的修改,就需要藉助交易記錄。使用檔案備份還原一個或多個受損檔案的步驟如下:
(1) 建立活動交易記錄的尾記錄備份。 對於離線檔案還原,在檔案還原之前必須始終先進行一次尾記錄備份。對於線上檔案還原,在檔案還原之後必須始終先進行一次記錄備份。因為記錄檔一日損壞,檔案還原則無法進行。
(2) 從每個損壞的檔案的最新檔案備份還原相應檔案。
(3) 針對每個還原的檔案,還原最近的差異檔案備份(如果有,因為這樣還原快)
(4) 按順序還原交易記錄備份,從時間上最早備份的記錄檔開始,到步驟1的尾日誌結束。
四 . 資料初始化
--第一步: 建立資料庫CREATE DATABASE [FileGroupTest]goUSE [FileGroupTest]--第二步:建立檔案組ALTER DATABASE [FileGroupTest] ADD FILEGROUP [FG_Test_Id_01]ALTER DATABASE [FileGroupTest] ADD FILEGROUP [FG_Test_Id_02]--第三步:建立檔案添加到檔案組ALTER DATABASE [FileGroupTest] ADD FILE(NAME = N'FG_TestUnique_Id_01_data',FILENAME = N'D:\Data\FG_TestUnique_Id_01_data.ndf',SIZE = 1MB, FILEGROWTH = 1MB )TO FILEGROUP [FG_Test_Id_01]ALTER DATABASE [FileGroupTest] ADD FILE(NAME = N'FG_TestUnique_Id_02_data',FILENAME = N'D:\Data\FG_TestUnique_Id_02_data.ndf',SIZE = 1MB, FILEGROWTH = 1MB )TO FILEGROUP [FG_Test_Id_02]--第四步建立表存放在不同檔案上CREATE TABLE Student(ID INT,Name varchar(50),[Address] varchar(100)) ON [FG_Test_Id_01]CREATE TABLE Teacher(ID INT,Name varchar(50),[Address] varchar(100)) ON [FG_Test_Id_02]
CREATE TABLE School(ID INT,Name varchar(50),[Address] varchar(100)) ON [PRIMARY]
-- 養成好習慣先進行完整備份backup database [FileGroupTest] to BackupTestDevice
五. 備份示範
-- 給二個表插入資料insert into Student values(1,'張三','廣東深圳')insert into Teacher values(1,'李四','廣東佛山')-- 記錄備份backup log [FileGroupTest] to BackupTestDevice-- 給二個表插入資料insert into Student values(2,'張三2','廣東深圳')insert into Teacher values(2,'李四2','廣東佛山')-- 記錄備份backup log [FileGroupTest] to BackupTestDevice-- 檔案組FG_Test_Id_01備份backup database [FileGroupTest] file='FG_TestUnique_Id_01_data' to BackupTestDevice-- 給二個表插入資料insert into Student values(3,'張三3','廣東深圳')insert into Teacher values(3,'李四3','廣東佛山')-- 記錄備份backup log [FileGroupTest] to BackupTestDevice-- 給二個表插入資料insert into Student values(4,'張三4','廣東深圳')insert into Teacher values(4,'李四4','廣東佛山')-- 記錄備份backup log [FileGroupTest] to BackupTestDevice-- 檔案組FG_Test_Id_02備份backup database [FileGroupTest] file='FG_TestUnique_Id_02_data' to BackupTestDevice
-- 給主檔案組表插入資料insert into School values(1,'深圳大學','廣東深圳南山')-- 主檔案組備份backup database [FileGroupTest] file='FileGroupTest' to BackupTestDevice
查看備份組如所示:type=F 代表檔案組備份類型
六. 還原示範
--步驟1:假設檔案FG_TestUnique_Id_01_data已損壞,資料庫處於線上狀態來還原該檔案restore database [FileGroupTest] file='FG_TestUnique_Id_01_data' from BackupTestDevice with file=33, norecovery
--此時FileGroupTest庫還能用,但FG_Test_Id_01檔案組上的Student表現不能用,此時處於離線狀態select * from FileGroupTest.dbo.Student
--這兩個表在不同檔案組上,可以使用select * from FileGroupTest.dbo.Schoolselect * from FileGroupTest.dbo.Teacher
BACKUP LOG 與 COPY_ONLY 選項將建立僅複製記錄備份,該備份不會截斷交易記錄。 僅複製記錄備份對日誌鏈沒有任何影響,因此其他記錄備份的表現就像僅複本備份不存在一樣。
--步驟2:進行新的記錄備份,以確保捕獲到該檔案離線時的點backup log [FileGroupTest] to BackupTestDevice with copy_only
--步驟3: 線上還原記錄備份restore log [FileGroupTest] from BackupTestDevice with file=34,norecoveryrestore log [FileGroupTest] from BackupTestDevice with file=35,norecoveryrestore log [FileGroupTest] from BackupTestDevice with file=38,recovery
--離線的檔案組FG_Test_Id_01處於線上狀態,Student表可以使用,資料庫恢複完成select * from FileGroupTest.dbo.Student