要備份SQL Server數(shù)據(jù)庫的時候,除了那些通常的例如磁帶容量和備份時間窗之外,還有很多因素需要考慮到。在這個技巧中,你可以學(xué)到應(yīng)對那些常見的SQL Server數(shù)據(jù)庫備份問題的方法。
軟件兼容性需要在升級之前解決
SQL Server數(shù)據(jù)庫備份的一個主要問題是備份應(yīng)用的兼容性問題。一些和SQL Server 2008一起工作的很好的備份應(yīng)用和SQL Server 2008 R2會有很大的兼容性問題。
一個例子就是賽門鐵克公司的Backup Exec 12.5。如果你在嘗試備份一個SQL Server 2008 R2服務(wù)器,你會看到一個錯誤信息說“嘗試瀏覽微軟SQL Server內(nèi)容時遇到錯誤。”如果你最近升級到了SQL Server 2008 R2,保證你的備份軟件是兼容的并在升級之后也可以使用就很關(guān)鍵了。
留意備份壓縮的影響
微軟推出SQL Server 2008的時候,他們引入了一個新的備份壓縮功能。最早壓縮備份功能只在SQL Server 2008企業(yè)版中才有,但后來微軟把這個功能加入了標(biāo)準(zhǔn)版的SQL Server 2008 R2。
備份壓縮的效果不一,取決于SQL Server數(shù)據(jù)庫中所包含的數(shù)據(jù)類型。但是我看到過超過60%的壓縮。除了備份尺寸的縮減,備份壓縮功能還可能通過減少產(chǎn)生的磁盤I/O而降低備份花費的時間。
但是壓縮的好處是有代價的。備份壓縮非常占用CPU。實際上,看到基本CPU利用率在壓縮備份的時候上升400%都是不稀奇的。不過要注意那不一定對所有的壓縮備份都一樣。對服務(wù)器CPU的影響隨可以壓縮的數(shù)據(jù)的量的大小而變化。
SQL Server比較偏向于一個是CPU密集型的應(yīng)用,所以很重要的一點是要權(quán)衡帶來的好處和對任何功能的可能的影響,以及可能的增加的CPU利用率。如果SQL Server運行在一個有很多資源的物理服務(wù)器上,那么一個壓縮的備份可能會使得服務(wù)器在備份進(jìn)行的過程中變慢,不過使用壓縮通常不會帶來災(zāi)難性的問題。
對運行在虛擬機(jī)中的SQL Server就可能不一樣了。在一個虛擬環(huán)境中,多個虛擬機(jī)分享一個物理服務(wù)器的硬件資源。理想狀態(tài)下這些資源的共享方式應(yīng)該是避免一個虛擬的任務(wù)高峰對同一個服務(wù)器上運行的其他虛擬機(jī)造成影響。
問題是虛擬機(jī)服務(wù)器的賣點是,他是降低硬件成本的一種方法。在它盡其所能進(jìn)行節(jié)省的過程中,多數(shù)的IT部門都會過度利用他們的硬件資源(特別是CPU和內(nèi)存)以便達(dá)到每個宿主服務(wù)器上的虛擬機(jī)密度最大化。
過度使用CPU資源在CPU的工作量可以預(yù)測,而且做過充分的容量計劃以保證CPU核不會工作過量的情況下,通常不會成為一個問題。不過如果你在一個運行在CPU過度使用的主機(jī)上的虛擬化SQL Server中,突然引入一個和備份壓縮相關(guān)的繁重工作,備份工作會明顯地影響在宿主服務(wù)器上運行的其他虛擬機(jī)。
應(yīng)對數(shù)據(jù)庫一致性避免數(shù)據(jù)庫損壞
盡管較新版本的SQL Server比一些較早版本在保持?jǐn)?shù)據(jù)庫一致性方面做得好些,一致性在高事務(wù)性的環(huán)境中還是可能成為一個問題。底線是數(shù)據(jù)庫一致性需要在進(jìn)行備份之前處理,這樣你就不會最后備份的是損壞了的數(shù)據(jù)。
幫你保證數(shù)據(jù)庫一致性的一個方法是使用SQL Server 2008 R2的維護(hù)計劃向?qū)?。維護(hù)計劃向?qū)Э梢员挥脕韯?chuàng)建SQL Server 代理任務(wù)來在你的數(shù)據(jù)庫里執(zhí)行內(nèi)部一致性檢查,來發(fā)現(xiàn)數(shù)據(jù)損壞的跡象。這個向?qū)б部梢员挥脕碜詣踊渌娜蝿?wù),例如重建索引,刪除空數(shù)據(jù)庫頁,更新索引統(tǒng)計,和運行備份任務(wù)。
SQL Server會在可能的情況下嘗試自動修理數(shù)據(jù)損壞,但是有的時候損壞范圍過大,以至于SQL無法修復(fù),或者有的時候你在嘗試恢復(fù)的時候才發(fā)現(xiàn)備份包含了損壞的數(shù)據(jù)。在這些情況下,你可能不得不使用第三方工具,例如Office Recovery來修復(fù)那些損壞的數(shù)據(jù)。