DBA五大致命失誤:你的備份可靠嗎?
注:Robert L Davis是微軟的高級(jí)數(shù)據(jù)庫(kù)管理員和專家,同時(shí)是《SQL Server》雜志的撰稿人,并合著《Pro SQL Server 2008 Mirroring》一書。
每個(gè)人都會(huì)犯錯(cuò),DBA也不例外。不過(guò)DBA犯錯(cuò)時(shí),通常他們也是***個(gè)發(fā)現(xiàn)錯(cuò)誤,并立刻修正錯(cuò)誤。但,有些錯(cuò)誤是不可原諒的,因?yàn)榭赡芙o企業(yè)造成不可挽回的損失。我將陸續(xù)介紹DBA的5大失誤,這些失誤會(huì)危及到數(shù)據(jù)的可恢復(fù)性、完整性和安全性,是不可原諒的錯(cuò)誤,DBA為此可能會(huì)付出丟掉工作的代價(jià)。
DBA***大失誤:你的備份可靠嗎?
DBA的首要重點(diǎn)工作是備份。這一點(diǎn),再如何強(qiáng)調(diào)其重要性,都不為過(guò)。就算萬(wàn)事出錯(cuò),你都應(yīng)該確保備份是任何災(zāi)難事件中***的一根稻草。我聽(tīng)到或遇到太多類似的事件,發(fā)生意外事件時(shí),發(fā)現(xiàn)備份工作沒(méi)有做,或者備份被損壞,無(wú)法恢復(fù)。這可能導(dǎo)致公司采取嚴(yán)厲措施規(guī)定什么樣數(shù)據(jù)必須保存,并得處理數(shù)據(jù)丟失的嚴(yán)重后果。沒(méi)有按照規(guī)定進(jìn)行可靠的備份可能會(huì)讓你丟掉工作。
在***的數(shù)據(jù)世界中,DBA應(yīng)該了解對(duì)恢復(fù)事件和數(shù)據(jù)丟失的要求。這兩個(gè)要求通常被稱為恢復(fù)時(shí)間目標(biāo)(Recovery Time Objective,RTO)和恢復(fù)點(diǎn)目標(biāo)(Reovery Point Objective,RPO),用來(lái)設(shè)計(jì)災(zāi)難恢復(fù)計(jì)劃(和相應(yīng)的的備份計(jì)劃),以支持?jǐn)?shù)據(jù)恢復(fù)。
在災(zāi)難發(fā)生時(shí),RTO是允許你宕機(jī)的時(shí)間,RPO是允許你丟失的數(shù)據(jù)量。DBA的目標(biāo)應(yīng)該是盡可能將數(shù)據(jù)流失接近零。在制定災(zāi)難恢復(fù)計(jì)劃的備份計(jì)劃時(shí),你應(yīng)該假設(shè)所有其他級(jí)別的保護(hù)都失敗,從備份中還原是你防御的***一道防線。
如果你真的走到這***一道防線,***的好備份就是你將丟失的數(shù)據(jù)量。這將幫助你確認(rèn)備份的頻率,如果數(shù)據(jù)丟失量的要求低,你就需要頻繁備份。你應(yīng)該高頻率備份的唯一備份類型是日志備份。這就意味要么是完整恢復(fù)模式(full recovery model),或大容量日志恢復(fù)模式(bulk-logged recovery model)。
有可靠的備份不僅僅意味著只是備份,而是指知道備份可以恢復(fù),知道何時(shí)進(jìn)行恢復(fù)。這就是測(cè)試備份的用武之地了。作為***限度,你應(yīng)該使用BACKUPVERIFYONLY命令來(lái)測(cè)試備份是否可恢復(fù)。
除了驗(yàn)證備份之外,我還會(huì)強(qiáng)烈建議使用CHECKSUM選項(xiàng),對(duì)所有的備份和恢復(fù)進(jìn)行驗(yàn)證。CHECKSUM選項(xiàng)執(zhí)行額外的檢查,可能時(shí)會(huì)確定數(shù)據(jù)庫(kù)是否已損壞。如果額外的檢查發(fā)現(xiàn)數(shù)據(jù)損壞,備份操作將失敗,并提醒數(shù)據(jù)已損壞。此外,它還會(huì)對(duì)整個(gè)備份文件執(zhí)行校驗(yàn),這將幫助你檢測(cè)是否備份文件是在創(chuàng)建后被損壞的。
對(duì)整個(gè)備份文件進(jìn)行***的CHECKSUM操作,***的好處是如果備份文件本身已損壞,那么對(duì)該文件進(jìn)行恢復(fù)會(huì)立刻失敗。這對(duì)非常大型的數(shù)據(jù)庫(kù)而言,尤為重要。因?yàn)橐粋€(gè)還原操作可能需要花數(shù)小時(shí)。如果備份文件已經(jīng)損壞,它在頁(yè)頭有一個(gè)額外的校驗(yàn)值,那么效驗(yàn)將在恢復(fù)操作開(kāi)始之時(shí)重新計(jì)算,并很快失敗。雖說(shuō)找出備份文件受損的恢復(fù)時(shí)間并非好事,但遠(yuǎn)遠(yuǎn)好過(guò)經(jīng)過(guò)幾個(gè)小時(shí)的恢復(fù)運(yùn)行才發(fā)現(xiàn)文件受損。
DBA能夠確保備份可恢復(fù)的***方法就是通過(guò)執(zhí)行實(shí)際的恢復(fù)進(jìn)行測(cè)試。理想情況下,我更喜歡結(jié)合使用自動(dòng)修復(fù)備份(以確保它們有效)和運(yùn)行災(zāi)備訓(xùn)練(演習(xí)停機(jī)情況下,DBA運(yùn)行整個(gè)恢復(fù)過(guò)程)。規(guī)劃和實(shí)踐是當(dāng)實(shí)際災(zāi)難發(fā)生時(shí),幫助你達(dá)到恢復(fù)需求的關(guān)鍵所在。
我想說(shuō)的是,DBA應(yīng)該做的***件事情和***一件事情都是備份。如果我遇到新的服務(wù)器或環(huán)境,我做的***件事情就是確保所有的服務(wù)器都有備份,并成功運(yùn)行。之后,我會(huì)重新檢查備份情況,基于實(shí)際的RPO和RTO需求制定一個(gè)災(zāi)難恢復(fù)計(jì)劃。如果DBA沒(méi)有做到第二步,還算情有可原,但是沒(méi)有可靠的備份就是一個(gè)無(wú)可饒恕的失誤。假如發(fā)生災(zāi)難或意外,DBA卻沒(méi)有可靠的備份,恐怕工作難保。