寫在前面
最近一直在整理數(shù)據(jù)庫最佳實(shí)踐的東西,我也會將各種文章建議,同步到博客園,希望能夠幫助更多的人了解數(shù)據(jù)庫,輕松玩轉(zhuǎn)數(shù)據(jù)庫,同時(shí)也減輕運(yùn)維人員的工作壓力,畢竟熟能生巧,熟練既是效率。
數(shù)據(jù)庫備份老生常談的話題,一搜索數(shù)據(jù)庫備份可能上千上萬篇,那么為什么還要寫一篇?因?yàn)橹匾《鶇s不能引起運(yùn)維人員的重視。上周還幫助一個(gè)客戶恢復(fù)了數(shù)據(jù),原因是斷電,啟動服務(wù)器后發(fā)現(xiàn)磁盤損壞,重要的系統(tǒng)頁大面積損壞。使用常規(guī)數(shù)據(jù)庫恢復(fù)手段全無用,使用第三方恢復(fù)工具也只能恢復(fù)部分?jǐn)?shù)據(jù),根本無法滿足業(yè)務(wù)的正常運(yùn)轉(zhuǎn),數(shù)據(jù)是企業(yè)的命根子,丟了,找不回來怎么辦? 難道要經(jīng)歷一次這樣的洗禮才能體會到備份的重要性么?
數(shù)據(jù)庫備份是個(gè)很重的話題,太多東西無法寫在同一篇文章中,另外這是一篇大量文字的掃盲文章,不足之處希望大家多多包涵。
一些名詞
完整數(shù)據(jù)庫備份:完整數(shù)據(jù)庫備份就是復(fù)制數(shù)據(jù)庫里的所有信息,通過單個(gè)完整備份,就能將數(shù)據(jù)庫恢復(fù)到某個(gè)時(shí)間點(diǎn)的狀態(tài)。
注:由于數(shù)據(jù)庫備份是一個(gè)在線的操作,一個(gè)大的完整數(shù)據(jù)庫備份可能需要一個(gè)小時(shí)甚至更長的時(shí)間,數(shù)據(jù)庫在這段時(shí)間里還會發(fā)生變化,所以完整數(shù)據(jù)庫備份還要對部分事務(wù)日志進(jìn)行備份,以便能夠恢復(fù)數(shù)據(jù)庫到一個(gè)事務(wù)一致的狀態(tài)。
文件備份:文件備份指備份一個(gè)或多個(gè)文件或文件組中的所有數(shù)據(jù)。
注:在完整恢復(fù)模式下,一整套完整文件備份和涵蓋所有文件備份的日志備份合起來等同于完整數(shù)據(jù)庫備份。
使用文件備份能夠只還原損壞的文件,而不用還原數(shù)據(jù)庫的其余部分,從而可加快恢復(fù)速度。例如,如果數(shù)據(jù)庫由位于不同磁盤上的若干個(gè)文件組成,在其中一個(gè)磁盤發(fā)生故障時(shí),只需還原這個(gè)故障磁盤上的文件的備份,其他磁盤上的文件無須還原,這樣會縮短還原時(shí)間。
部分備份:部分備份與完整數(shù)據(jù)庫備份類似,但是部分備份默認(rèn)只包含數(shù)據(jù)庫可讀寫部分,數(shù)據(jù)庫的只讀文件將不會被備份。
注:因?yàn)橹蛔x部分是不會發(fā)生變動的,總是去備份它有點(diǎn)浪費(fèi)時(shí)間與精力所以部分備份在希望不備份只讀文件組時(shí)非常有用。部分備份可以說是數(shù)據(jù)庫備份和文件備份之間的一個(gè)中間類型。如果一個(gè)數(shù)據(jù)庫里沒有只讀文件,那么部分備份和數(shù)據(jù)庫備份就沒什么差別。
差異備份:差異備份要求數(shù)據(jù)庫之前做過一次完整備份。差異備份僅捕獲自該次完整備份后發(fā)生更改的數(shù)據(jù),這個(gè)完整備份被稱為差異備份的“基準(zhǔn)”。差異備份僅包括建立差異基準(zhǔn)后更改的數(shù)據(jù)。差異備份比差異基準(zhǔn)更小且更快,便于執(zhí)行頻繁備份,從而降低了數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
日志備份:數(shù)據(jù)備份集中精力于數(shù)據(jù)文件的備份。對于日志文件,相應(yīng)地有事務(wù)日志備份。每個(gè)日志備份包括創(chuàng)建備份時(shí)處于活動狀態(tài)的部分事務(wù)日志,以及先前日志備份中未備份的所有日志記錄。不間斷的日志備份序列包含數(shù)據(jù)庫的完整(即連續(xù)不斷的)日志鏈。在完整恢復(fù)模式下(或者在大容量日志恢復(fù)模式下的某些時(shí)候),連續(xù)不斷的日志鏈可以將數(shù)據(jù)庫還原到任意時(shí)間點(diǎn)。
尾日志備份:“結(jié)尾日志備份”捕獲尚未備份的任何日志記錄(“結(jié)尾日志”),以防丟失所做的工作并確保日志鏈完好無損。 在將 SQL Server 數(shù)據(jù)庫恢復(fù)到其最近一個(gè)時(shí)間點(diǎn)之前,必須先備份數(shù)據(jù)庫的事務(wù)日志。 結(jié)尾日志備份將是數(shù)據(jù)庫還原計(jì)劃中相關(guān)的最后一個(gè)備份。
注意:并非所有還原方案都要求執(zhí)行結(jié)尾日志備份。 如果恢復(fù)點(diǎn)包含在較早的日志備份中,則無需結(jié)尾日志備份。 此外,如果您準(zhǔn)備移動或替換(覆蓋)數(shù)據(jù)庫,并且在最新備份后不需要將該數(shù)據(jù)庫還原到某一時(shí)間點(diǎn),則不需要結(jié)尾日志備份。
僅復(fù)制備份(Copy-Only):獨(dú)立于常規(guī)SQL Server備份序列的SQL Server備份。通常,進(jìn)行備份會更改數(shù)據(jù)庫并影響其后備份的還原序列。但是,有時(shí)在不影響數(shù)據(jù)庫全部備份和還原過程的情況下,為特殊目的而進(jìn)行備份還是有用的。為實(shí)現(xiàn)此目的,SQL Server引人了下列兩種僅復(fù)制備份
(1)僅復(fù)制完整備份
僅復(fù)制完整備份也備份整個(gè)數(shù)據(jù)庫的內(nèi)容。它和正常的完整備份的區(qū)別是,做完了以后差異備份的基準(zhǔn)不會變,因此不影響差異備份序列。
(2)僅復(fù)制日志備份
僅復(fù)制日志備份只備份當(dāng)前日志文件里現(xiàn)有的內(nèi)容,但是不會清空日志文件里備份下的日志。因此,下次再做正常日志備