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