[摘要] 備份與恢復是DBA的最重要任務之一。本文介紹了SQL Server中數據庫備份恢復方法,同時,就利用事務日志實現時點還原做了詳細討論,使數據的管理更加靈活。并給出了時點還原的實例。
[關鍵詞] SQL Server數據庫事務日志數據備份數據還原時點還原
一、備份與恢復概述
如今硬件既可靠又有冗余,好像就不需要備份了,但是硬件只能防止這個硬件出故障。導致數據丟失的還有其他原因,如由于用戶或管理員錯誤(即使數據庫專家也難免會損毀數據庫)、數據被破壞、惡意破壞數據或火災之類的災難是難以避免的。因此作為DBA最重要的任務之一就是要制定良好的備份、還原計劃。
1.備份類型
備份是DBA定期地將整個數據庫復制到磁帶或另一個磁盤上保存起來的過程。常用的數據備份類型有:完全數據庫備份、差異數據庫備份、事務日志備份、文件或文件組備份。一個通用的備份策略是:以較長的時間間隔執行完全備份,以適中的時間間隔進行差異備份,并以較短的時間間隔進行事務日志備份。當數據遭到破壞后就可以利用備份來恢復或還原數據庫。
2.恢復模型
SQL Server2000中增加了恢復模型。三種恢復模型分別是:full(完全)、bulk_logged(批量登記)、simple(簡單)。
Full恢復:這種恢復方式提供了最大的靈活性,用完全數據庫庫備份和事務日志備份組合實現。也可以進行差異備份和文件級備份。該恢復方式可以將數據庫恢復到特定時刻。
Bulk_logged恢復:該模式也可以完全恢復數據庫,但如果事務日志文件包含批量操作,則不能夠恢復到特定時刻,而是需要恢復整個日志。
Simple恢復:該模式是最基本的備份與恢復模型。只限于完全數據庫與差異備份數據庫的恢復。
數據庫是一個裝載數據庫的備份,然后應用事務日志重建的過程。一個通用的恢復策略是:首先恢復完全備份的數據,然后恢復差異備份數據,最后根據事務日志備份進行恢復。
綜上所述,欲實現時點還原,即將數據恢復到某個特定的時刻,就必須設置恢復模式為full模式。
二、時點還原的實現
在許多應用軟件(尤其大多數微軟的應用軟件)中,如果有誤操作,系統給用戶提供了撤消操作,這樣給用戶的操作帶來很大方便,在DBMS中沒有提供撤消操作,比如用戶誤刪了表中數據或某個數據庫對象,是沒有撤消操作的;或者想查看過去任一時刻某公司數據情況等,只通過備份恢復功能是作不到的。但是我們可以利用事務日志的特性彌補這一缺陷。以下以xsda數據庫為例,說明時點還原的實現方法:
1.首先要進行一次完全備份(這里可以使用備份設備也可以使用備份文件進行備份)。
2.緊接著進行一次事務日志的備份。
3.以上兩步做好以后,就可以不定期的備份事務日志。
一定要保證事務日志的一致性,當需要進行時點還原時,首先恢復完全備份的數據庫,然后再逐次恢復日志,如下圖所示(在企業管理器中實現):
選中時點還原選項后,右邊邊文本框即被激活,輸入時點后,確定,數據庫即被恢復到指定時刻。
也可以用Transact-SQL實現,具體操作如下:
Restore databasexsglfromxsdatabackup with file=1 ,norecovery
//xsdatabackup為完全備份的數據庫
Go
Restore log xsgl from with file=1 ,norecovery
// xsrzbackup1為第一次進行的日志備份
Go
Restore log xsgl from xsrzbackup2 with file=3 recovery,stop at=’December 13, 2006 08:00 AM’
//xsrzbackup2為第二次進行的日志備份
注意:在還原過程中一定要注意事務日志備份的連續性,不能有中斷,否則時點還原就會失敗。
三、小結
數據庫管理的最重要任務之一就是備份與還原,盡管SQL server提供了將備份與恢復自動化的工具與模型,但DBA仍然需要確定適當的方法,建立健壯的恢復、還原計劃,一方面可以防止數據丟失,另一方面為數據處理提供靈活、方便的使用機制。