數據庫的備份恢復原理
文章出處:http://hlpi.cn 作者:開發(fā)部
關于數據庫的備份恢復原理,,大家多少都比較熟悉了。但是,,你目前做的數據庫備份有多可靠,?你可以安心睡覺了嗎?如果答案是肯定的,,那就不用多花時間看下文了,,如果覺得還不夠安心,,總擔心數據庫哪一天壞了修不好,那么請接著看:
1,、我有RAID,,還需要做數據庫備份嗎?需要,。有了RAID,,萬一部份磁盤損壞,可以修復數據庫,,有的情況下數據庫甚至可以繼續(xù)使用,。但是,如果哪一天,,你的同事不小心刪除了一條重要的記錄,,怎么辦?RAID是無能為力的,。你需要合適的備份策略,,把那條被誤刪的數據恢復出來。所以有了RAID,,仍需要做備份集群,,磁盤鏡像同理。
2,、如果你只做全備份,,那么受限于全備份的大小和備份時間,不可能常做,。而且只有全備份,,不能將數據庫恢復至某個時間點。所以,,我們需要全備份+日志備份,。比如每天一個全備份,每隔1小時或若干分鐘一個日志備份,。說到差異備份,,因為微軟的差異備份記錄的是上一次全備份以來發(fā)生的變化,所以,,如果數據庫的改動很頻繁的話,,沒過多久,差異備份就會和全備份的大小接近,,因此這種情況下就不合適了,。因此,全備份+日志備份的方案適合絕大多數的用戶,。
3,、如果你僅在數據庫本地做備份,,萬一磁盤損壞,或者整個服務器硬件損壞,,備份也就沒了,,就沒法恢復數據庫。因此,,你需要把備份文件傳送至另一個物理硬件上,。大多數用戶不用磁帶機,因此不考慮,。一般,我們需要另一臺廉價的服務器或者PC來存放數據庫的備份,,來防止硬件損壞造成的備份丟失,。
4、你可以在數據庫服務器本地做完備份,,然后使用某些方式將備份文件傳送至備機,。你是在備份完成后就馬上穿送的嗎?其實可以考慮將傳送備份的腳本用T-SQL語句來寫,。
5,、備份文件傳送至備機后,就可以高枕無憂了嗎,?不,。作為DBA的你還需要檢查備機上的備份文件是否能將數據庫恢復至最新,如果采用日志備份,,會不會因為丟失某一個日志備份文件而導致數據庫不能恢復至最新,?如何檢查日志備份文件之間存在斷檔?
6,、為了將數據庫盡可能的恢復到最新,,你可能會每隔10分鐘(甚至1分鐘)執(zhí)行一次日志備份,那么萬一數據庫壞了,,在恢復的時候,,手動恢復成百上千個日志文件,是不是不太現實,?
7,、如果你所在公司有很多的數據庫服務器(就像我所在的公司),而且磁盤空間有限,,那么你不得不經常登錄服務器來刪除舊的備份文件,,如果哪天忘了,或者五一十一長假,,磁盤空間用完了,,就麻煩了,。
8、數據庫在備份的時候,,并不會檢查數據頁面的完整性,,如果數據頁壞了,備份作業(yè)仍會執(zhí)行,,而且不會報錯,,等到你發(fā)現數據頁有錯誤的時候,你也很可能已經因為磁盤空間不足,,而刪除了早期的備份,,而此時剩下的那些備份可能都是包含損壞的數據頁,如果損壞的數據頁是某個表的表頭的話,,那這個表你就再也沒辦法恢復了,。
9、所以你需要定期執(zhí)行DBCC檢查,,來盡早發(fā)現數據庫頁面的完整性,。在未作完DBCC檢查之前,你不能刪除舊的備份,,以防止新的備份存在問題,。所以,刪除備份文件的工作變的有些麻煩,。
10,、你可能知道SQL Server提供了數據庫維護計劃。沒錯,,使用它可以定期做備份,,執(zhí)行DBCC檢查,但這一切僅限于本機操作,。為了使數據庫可靠,,你還是需要自己把本地備份傳送至備機。
綜上,,你的備份做好了嗎,?檢查了嗎?刪除舊的備份是不是花去你很多時間,,特別是在網絡條件不好的時候,?如果數據庫備份文件的傳送在某一時刻停止了,你多久才能發(fā)現,?公司值晚班的同事有權限檢查數據庫的備份情況嗎,?