天天看點

DBA需要考慮備份相關問題

關于資料庫的備份恢複原理,大家多少都比較熟悉了。但是,你目前做的資料庫備份有多可靠?你可以安心睡覺了嗎?如果答案是肯定的,那就不用多花時間看下文了,如果覺得還不夠安心,總擔心資料庫哪一天壞了修不好,那麼請接着看:

  1、我有RAID,還需要做資料庫備份嗎?需要。有了RAID,萬一部份磁盤損壞,可以修複資料庫,有的情況下資料庫甚至可以繼續使用。但是,如果哪一天,你的同僚不小心删除了一條重要的記錄,怎麼辦?RAID是無能為力的。你需要合适的備份政策,把那條被誤删的資料恢複出來。是以有了RAID,仍需要做備份。

  叢集,磁盤鏡像同理。

  2、如果你隻做全備份,那麼受限于全備份的大小和備份時間,不可能常做。而且隻有全備份,不能将資料庫恢複至某個時間點。是以,我們需要全備份+日志備份。比如每天一個全備份,每隔1小時或若幹分鐘一個日志備份。說到差異備份,因為微軟的差異備份記錄的是上一次全備份以來發生的變化,是以,如果資料庫的改動很頻繁的話,沒過多久,差異備份就會和全備份的大小接近,是以這種情況下就不合适了。是以,全備份+日志備份的方案适合絕大多數的使用者。

  3、如果你僅在資料庫本地做備份,萬一磁盤損壞,或者整個伺服器硬體損壞,備份也就沒了,就沒法恢複資料庫。是以,你需要把備份檔案傳送至另一個實體硬體上。大多數使用者不用錄音帶機,是以不考慮。一般,我們需要另一台廉價的伺服器或者PC來存放資料庫的備份,來防止硬體損壞造成的備份丢失。

  4、你可以在資料庫伺服器本地做完備份,然後使用某些方式将備份檔案傳送至備機。你是在備份完成後就馬上穿送的嗎?其實可以考慮将傳送備份的腳本用T-SQL語句來寫。

  5、備份檔案傳送至備機後,就可以高枕無憂了嗎?不。作為DBA的你還需要檢查備機上的備份檔案是否能将資料庫恢複至最新,如果采用日志備份,會不會因為丢失某一個日志備份檔案而導緻資料庫不能恢複至最新?如何檢查日志備份檔案之間存在斷檔?

  6、為了将資料庫盡可能的恢複到最新,你可能會每隔10分鐘(甚至1分鐘)執行一次日志備份,那麼萬一資料庫壞了,在恢複的時候,手動恢複成百上千個日志檔案,是不是不太現實?

  7、如果你所在公司有很多的資料庫伺服器(就像我所在的公司),而且磁盤空間有限,那麼你不得不經常登入伺服器來删除舊的備份檔案,如果哪天忘了,或者五一十一長假,磁盤空間用完了,就麻煩了。

  8、資料庫在備份的時候,并不會檢查資料頁面的完整性,如果資料頁壞了,備份作業仍會執行,而且不會報錯,等到你發現資料頁有錯誤的時候,你也很可能已經因為磁盤空間不足,而删除了早期的備份,而此時剩下的那些備份可能都是包含損壞的資料頁,如果損壞的資料頁是某個表的表頭的話,那這個表你就再也沒辦法恢複了。

  9、是以你需要定期執行DBCC檢查,來盡早發現資料庫頁面的完整性。在未作完DBCC檢查之前,你不能删除舊的備份,以防止新的備份存在問題。是以,删除備份檔案的工作變的有些麻煩。

  10、你可能知道SQL Server提供了資料庫維護計劃。沒錯,使用它可以定期做備份,執行DBCC檢查,但這一切僅限于本機操作。為了使資料庫可靠,你還是需要自己把本地備份傳送至備機。

  綜上,你的備份做好了嗎?檢查了嗎?删除舊的備份是不是花去你很多時間,特别是在網絡條件不好的時候?如果資料庫備份檔案的傳送在某一時刻停止了,你多久才能發現?公司值晚班的同僚有權限檢查資料庫的備份情況嗎?