數據庫管理員最大的夢魘,莫過于已經做了備份,但是在想恢復的時候,發現備份文件也是壞的。這將意味著數據庫的丟失,后果非常可怕。發生這種情況的原因一般有3個: · 備份文件和數據庫放在同一個(或一組)物理硬盤上。硬盤出故障,備份也保不
數據庫管理員最大的夢魘,莫過于已經做了備份,但是在想恢復的時候,發現備份文件也是壞的。這將意味著數據庫的丟失,后果非常可怕。發生這種情況的原因一般有3個:
· 備份文件和數據庫放在同一個(或一組)物理硬盤上。硬盤出故障,備份也保不住。
· 備份介質損壞;或者做的是網絡備份,數據在網絡傳輸中發生了損壞。
· 數據庫在做完整備份、文件備份或者文件組備份的時候,里面的內容就已經有了損壞。
SQL Server在做數據備份的時候為了節省時間,基本只是很簡單地把數據頁面拷貝下來,不會做一致性檢查的。但是在恢復的時候,需要將數據庫恢復(Recover)到事務一致的一個時間點。如果備份中的損壞妨礙了SQL Server的前滾后滾(Redo和Undo),恢復動作就會遇到錯誤。
無論何種情況,您都可以:
· 修復硬件錯誤并重新嘗試還原操作。
· 忽略錯誤,繼續還原操作,并在還原完成后修復數據庫。
· 放棄還原操作,改用備用還原計劃。
在現實環境里,能夠通過重試解決的問題還是比較少的。硬件錯誤往往會永久地損壞備份文件里的內容。在先前的SQLServer版本里,管理員可能不得不嘗試去尋找更早的備份。這往往意味著有很多天的數據丟失,損失是比較大的。
SQL Server 數據庫恢復有一個“忽略錯誤”的功能,在這種為難的時刻可以發揮很大的作用。
CONTINUE_AFTER_ERROR是恢復命令(RESTORE)里面的一個選項。它將使還原操作跳過錯誤繼續進行,并還原SQL Server現在所能還原的所有內容。數據還原結束后,可以應用后續事務日志備份,將數據庫恢復。如果日志恢復時遇到錯誤,SQLServer會在日志中報告,并且不讓用戶訪問和這些事務有關的頁面。數據庫將在盡可能的情況下聯機。所以大部分情況下,數據庫整體還是能恢復出來,只是部分數據有可能會丟失。
數據丟失量取決于遇到的錯誤。例如,一般數據頁中的錯誤只會引起該頁進入可疑狀態,但數據庫恢復還會繼續。有問題的頁面編號將被寫入磁盤并記錄到suspect_pages表和錯誤日志中,提醒管理員在恢復結束后繼續處理它們。如果不設置CONTINUE_AFTER_ERROR,SQL Server只要遇到一個頁面有問題,整個恢復動作都會停止。
如果錯誤發生在一些比較關鍵的地方,比如某個數據文件的文件頭信息,那么恢復還是有可能完全失敗,數據庫無法恢復。所以這個方法只供救急之用。不能保證每次使用的效果。使用WITHCONTINUE_AFTER_ERROR還原數據后,要檢查錯誤日志以了解有關錯誤的詳細信息。
基本的RESTORE語法為:
RESTORE DATABASE database_name
FROM backup_deviceWITH CONTINUE_AFTER_ERROR, [NORECOVERY ]
管理員可以在忽略錯誤繼續執行的還原順序結束時,使用DBCCCHECKDB修復數據庫。要使CHECKDB在使用RESTORECONTINUE_AFTER_ERROR后以最大的一致性運行,建議在DBCC CHECKDB命令中使用WITH TABLOCK選項。在極個別情況下,可能沒有足夠的信息來修復數據庫,CHECKDB也沒辦法修好數據庫,數據丟失將不可避免。不是說,有了RESTORE CONTINUE_AFTER_ERROR,備份壞掉也沒關系的。
CONTINUE_AFTER_ERROR只不過是命令SQLServer跳過一切它能夠跳過的錯誤,將所有還能讀出來的數據恢復出來,從而最大程度地挽回數據。但是有些對數據一致性要求比較高的系統,比如銀行賬戶系統,用戶可不接受“部分”數據恢復。對他們來講,數據不一致可能就意味著錢已經從一個賬戶轉走,但是沒有進入另一個賬戶,這是不可接受的。所以他們寧可將數據庫恢復到昨天的狀態,把今天所有的操作重做一遍。
對于這樣的系統,在建立備份和選擇恢復策略的時候,就要考慮到最壞的情況,預先想好方案,將損失降到最低。
事先預備一臺備用機,將做好的備份使用LogShipping或者其他類似的機制在備用服務器上預先恢復好,是一個值得推薦的方法。這樣做的好處有:
(1)比起物理鏡像之類的技術,這種方案比較經濟。備用服務器的硬件要求不高,只要硬盤足夠大。
(2)雖然SQL Server提供了若干備份校驗機制,但是確保備份完整可靠的唯一辦法是真正地去恢復它。
(3)提前恢復備份,使得在真正災難發生時,只需要恢復最后一個日志備份即可,而不需要在火燒眉毛的時候,去等那個漫長的完整備份恢復,可以大大節約災難恢復時間。
(4)備用機上的數據庫雖然不能修改,但是可以使用STANDBY參數將數據庫恢復到只讀模式。可以將一些報表查詢工作轉移到備用機上,減輕生產服務器的負擔。
總之,數據安全非常重要,災難恢復時間要求很短的數據庫,如果沒有鏡像技術的保障,備用服務器是非常必要的。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com