薛慧珍
(中國(guó)煤炭科工集團(tuán)太原研究院,太原 030006)
隨著信息化的全面實(shí)施,企業(yè)的設(shè)計(jì)數(shù)據(jù)、生產(chǎn)數(shù)據(jù)、銷(xiāo)售數(shù)據(jù)、財(cái)務(wù)數(shù)據(jù)等已電子化。對(duì)一個(gè)信息化程度比較高的企業(yè)來(lái)說(shuō),最有價(jià)值的財(cái)產(chǎn)或許就是企業(yè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。因此,應(yīng)根據(jù)具體環(huán)境和條件制定一個(gè)完善可行、確保系統(tǒng)安全的備份計(jì)劃,沒(méi)有備份的系統(tǒng)是不可靠的、危險(xiǎn)的。破壞性病毒、誤操作、自然災(zāi)害等,都可能會(huì)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)造成難以估量的破壞。尤其一個(gè)系統(tǒng)中最重要的是大量的實(shí)時(shí)數(shù)據(jù),如果沒(méi)有備份及恢復(fù)策略顯然是不安全和不完善的,本文介紹了幾種數(shù)據(jù)庫(kù)備份與恢復(fù)的方法,其測(cè)試環(huán)境為,操作系統(tǒng):Windows 2000 Server,數(shù)據(jù)庫(kù) MS-SQL Server2000(Server版)。
備份是數(shù)據(jù)庫(kù)管理員定期將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶或另一個(gè)磁盤(pán)上并保存起來(lái)的過(guò)程。常用的數(shù)據(jù)備份類(lèi)型有:完全備份、差異備份、事務(wù)日志備份、文件或文件組備份。通用的備份策略是:以較長(zhǎng)的時(shí)間間隔執(zhí)行完全備份,以適中的時(shí)間間隔進(jìn)行差異備份,并以較短的時(shí)間間隔進(jìn)行事務(wù)日志備份。當(dāng)數(shù)據(jù)遭到破壞后就可以利用備份來(lái)恢復(fù)數(shù)據(jù)庫(kù)?;謴?fù)數(shù)據(jù)庫(kù)是一個(gè)裝載數(shù)據(jù)庫(kù)備份然后應(yīng)用事務(wù)日志重建的過(guò)程[1]。通用的恢復(fù)策略是:首先恢復(fù)完全備份的數(shù)據(jù),然后恢復(fù)差異備份數(shù)據(jù),最后根據(jù)事務(wù)日志備份進(jìn)行恢復(fù)。
①完全備份可以備份整個(gè)數(shù)據(jù)庫(kù),包含用戶表等所有數(shù)據(jù)庫(kù)對(duì)象。但它需要花費(fèi)較多的時(shí)間和空間。②事務(wù)日志備份。備份的內(nèi)容是上次備份以來(lái)對(duì)數(shù)據(jù)庫(kù)所做的改變,只需要很少的時(shí)間。③差異備份。它是只備份數(shù)據(jù)庫(kù)中部分?jǐn)?shù)據(jù)的另一種方法,它使用整個(gè)數(shù)據(jù)庫(kù)的一種新的映像,它比完全備份小,其優(yōu)點(diǎn)是存儲(chǔ)和恢復(fù)速度快。④文件備份。數(shù)據(jù)庫(kù)由硬盤(pán)上的許多文件構(gòu)成,如果這個(gè)數(shù)據(jù)庫(kù)非常大。那么可以使用文件備份,每晚備份數(shù)據(jù)庫(kù)的一部分。由于一般情況下數(shù)據(jù)庫(kù)不會(huì)大到必須使用多個(gè)文件存儲(chǔ),所以這種備份不是很常用。
在做各種備份前,如果日志特別大,應(yīng)先收縮日志。方法如下:設(shè)置數(shù)據(jù)庫(kù)模式為簡(jiǎn)單模式。在企業(yè)管理器中選取所要備份的數(shù)據(jù)庫(kù),右鍵選擇屬性,在屬性中選擇選項(xiàng)將模式設(shè)為簡(jiǎn)單,然后在當(dāng)前數(shù)據(jù)庫(kù)上點(diǎn)右鍵,看所有任務(wù)中的收縮數(shù)據(jù)庫(kù)。一般的默認(rèn)設(shè)置不用調(diào)整,直接點(diǎn)確定即可,收縮數(shù)據(jù)庫(kù)完成后,再將數(shù)據(jù)庫(kù)屬性重新設(shè)置為標(biāo)準(zhǔn)模式。
①利用文件備份,即備份數(shù)據(jù)庫(kù)本身的2個(gè)文件。首先打開(kāi)SQL Server服務(wù)管理器,停止當(dāng)前的服務(wù),然后把要備份的數(shù)據(jù)庫(kù)文件,即后綴名為(.dbf)和(.ldf)的2個(gè)文件拷貝到所備份的目錄。這兩個(gè)文件必須同時(shí)拷貝,否則恢復(fù)時(shí)將比較麻煩。也可不必停止服務(wù),在SQL Server企業(yè)管理器中把需要備份的數(shù)據(jù)庫(kù)分離出來(lái),然后進(jìn)行2個(gè)文件的拷貝。這種方法是使用數(shù)據(jù)庫(kù)本身不大,并可以暫時(shí)停止使用的數(shù)據(jù)庫(kù)。它的優(yōu)點(diǎn)在于恢復(fù)時(shí)簡(jiǎn)單。②利用SQL Server企業(yè)管理器中的備份向?qū)ё鰝浞?。首先打開(kāi)SQL企業(yè)管理器,選擇要備份的數(shù)據(jù)庫(kù)名稱,然后菜單中的工具→選擇要備份數(shù)據(jù)庫(kù),根據(jù)向?qū)нx擇路徑,輸入備份文件名,點(diǎn)確定進(jìn)行備份。這種備份用來(lái)做完整備份較好,它可以根據(jù)需要實(shí)時(shí)進(jìn)行備份,并且不影響數(shù)據(jù)庫(kù)的使用,但對(duì)于大的數(shù)據(jù)庫(kù)這種方法比較費(fèi)時(shí)[3]。③利用計(jì)劃進(jìn)行數(shù)據(jù)庫(kù)的自動(dòng)備份。首先打開(kāi)企業(yè)管理器,選中需要備份的數(shù)據(jù)庫(kù),然后選擇菜單中的工具→數(shù)據(jù)庫(kù)維護(hù)計(jì)劃器,根據(jù)提示先選擇要進(jìn)行自定備份的數(shù)據(jù)庫(kù)。指定備份的周期和時(shí)間點(diǎn),然后選擇備份目錄,根據(jù)提示最后確定,自動(dòng)備份計(jì)劃完成。這樣還不能自動(dòng)進(jìn)行備份,還需要起動(dòng)SQL Server Agent服務(wù),此服務(wù)啟動(dòng)后,就可按照操作者上面的設(shè)置進(jìn)行自動(dòng)備份。這種方法只需要做一次計(jì)劃就可使SQL Server根據(jù)操作者的設(shè)置進(jìn)行數(shù)據(jù)庫(kù)的自動(dòng)備份。④利用SQL語(yǔ)句進(jìn)行備份。首先打開(kāi)查詢分析器,連接到需要備份數(shù)據(jù)庫(kù)的SQL Server服務(wù)器上,新建一個(gè)文檔,輸入:BACKUP DATABASE[數(shù)據(jù)庫(kù)名稱]TO DISK=’路徑和文件名’WITH Format,然后按F5或點(diǎn)擊執(zhí)行按鈕,即可對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份。這種方法適合熟悉SQL語(yǔ)句的人員使用。
①利用備份的數(shù)據(jù)庫(kù)文件直接進(jìn)行恢復(fù)。打開(kāi)企業(yè)管理器,選擇所要恢復(fù)的數(shù)據(jù)庫(kù)所在的服務(wù)器,右鍵單擊數(shù)據(jù)庫(kù)選擇所有任務(wù)中的附加數(shù)據(jù)庫(kù),根據(jù)提示選擇備份下的文件,即可進(jìn)行恢復(fù)[2]。此方法適用于數(shù)據(jù)文件完全損壞或丟失的情況。②利用手工做的備份文件或執(zhí)行計(jì)劃所產(chǎn)生的備份文件進(jìn)行恢復(fù)。打開(kāi)企業(yè)管理器,選擇所要恢復(fù)的數(shù)據(jù)庫(kù)所在的服務(wù)器,然后新建一個(gè)數(shù)據(jù)庫(kù),新建的數(shù)據(jù)庫(kù)自行取名(一般都與原數(shù)據(jù)庫(kù)名稱相同),建好數(shù)據(jù)庫(kù)后選中,選擇菜單中工具下的恢復(fù)數(shù)據(jù)庫(kù),在彈出窗口的還原選項(xiàng)中選擇“從設(shè)備”,然后選擇備份文件名,點(diǎn)擊上方常規(guī)旁的選項(xiàng)按鈕,在出現(xiàn)的窗口中選擇“在現(xiàn)有數(shù)據(jù)庫(kù)上強(qiáng)制還原?!辈⒃诨謴?fù)完成狀態(tài)中,選擇“使數(shù)據(jù)庫(kù)可以繼續(xù)運(yùn)行,但無(wú)法還原其他事務(wù)日志”選項(xiàng),最后點(diǎn)擊確定即可進(jìn)行恢復(fù)。如果出現(xiàn)錯(cuò)誤提示,一般情況是因?yàn)閿?shù)據(jù)庫(kù)路徑不正確或磁盤(pán)空間不足引起,因此在新建數(shù)據(jù)庫(kù)時(shí)最好將數(shù)據(jù)文件和日志文件按原數(shù)據(jù)庫(kù)的路徑存放。這是一種最常用的方法,但這種方法恢復(fù)大的數(shù)據(jù)庫(kù)比較費(fèi)時(shí),一個(gè)4G的數(shù)據(jù)庫(kù)大約需30min以上。③利用SQL語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)的恢復(fù),這種方法也是利用手工做的備份文件或計(jì)劃產(chǎn)生的備份文件來(lái)進(jìn)行恢復(fù)。首先,打開(kāi)查詢分析器,連接到需要恢復(fù)的數(shù)據(jù)庫(kù)所在服務(wù)器上,新建一個(gè)文檔,輸入:RESTORE DATABASE[數(shù)據(jù)庫(kù)名稱]FROM DISK=’路徑和文件名’WITH Stats,然后按F5或點(diǎn)執(zhí)行,即可對(duì)數(shù)據(jù)庫(kù)進(jìn)行恢復(fù)。這種方法適合熟悉SQL語(yǔ)句的人員使用。④上述幾種方法都是在有完整備份文件的情況下對(duì)數(shù)據(jù)庫(kù)進(jìn)行恢復(fù)。有時(shí)會(huì)碰到一些特殊情況。下面介紹特殊情況下恢復(fù)數(shù)據(jù)的2種方法:第一,利用sp attach single file db恢復(fù)。雖然恢復(fù)的可能性不大,但如果這個(gè)數(shù)據(jù)剛好執(zhí)行了一個(gè)checkpoint,還是有可能成功的。在查詢分析器中執(zhí)行如下語(yǔ)句:EXEC sp attach single file db@dbname=’數(shù)據(jù)名稱’,@physname=’路徑和數(shù)據(jù)文件名’執(zhí)行完后,如果提示設(shè)備激活錯(cuò)誤,已創(chuàng)建新日志文件,則為恢復(fù)成功。第二,如果上述方法沒(méi)有恢復(fù),再按照如下步驟進(jìn)行。首先,分離出損壞的數(shù)據(jù)庫(kù),然后把.mdf文件拷貝出來(lái),再新建一個(gè)同名的數(shù)據(jù)庫(kù)。停掉SQL Server(注意不要分離數(shù)據(jù)庫(kù)),用原數(shù)據(jù)庫(kù)的數(shù)據(jù)文件,即.mdf文件覆蓋掉這個(gè)新建的數(shù)據(jù)庫(kù)。重啟SQL Server,此時(shí)打開(kāi)企業(yè)管理器時(shí)會(huì)出現(xiàn)置疑,先不做處理。在查詢分析器上執(zhí)行下列語(yǔ)句(注意修改其中的數(shù)據(jù)庫(kù)名):
執(zhí)行完后,原來(lái)的數(shù)據(jù)庫(kù)就恢復(fù)了,恢復(fù)后的日志文件比原來(lái)的要小。上述語(yǔ)句最好是單步執(zhí)行,這樣可以看到每一步的執(zhí)行結(jié)果。
通常情況下,利用SQL Server自帶的功能進(jìn)行數(shù)據(jù)的備份與恢復(fù)。為確保數(shù)據(jù)的安全,最好的辦法還是制定完善的數(shù)據(jù)備份制度,只有多做備份,才能在數(shù)據(jù)庫(kù)發(fā)生故障時(shí)進(jìn)行較好的恢復(fù)。另外,對(duì)出問(wèn)題的數(shù)據(jù)庫(kù)要謹(jǐn)慎處理,最好請(qǐng)專(zhuān)業(yè)人員處理。