SQL Server數據庫升級需要DBA進行大量的規劃與測試。大多數的時間裡,升 級過程也許不會出現任何問題,但是一些潛在的威脅絕不能忽視。在本文中,SQL Server專家Roman Rehak將為您介紹數據庫升級或者遷移過程中,DBA應該注意哪 些問題。
升級測試不足。在SQL Server數據庫升級出現問題的情況下,其 中最常見的原因就是測試不足。DBA不僅需要對每一個連接數據庫的應用進行測試 ,還需要測試任何一個執行數據庫代碼的程序,比如SSIS包、數據庫工具、輔助 存儲過程以及復制等。如果你使用SQL Server 2000版本的話,那麼測試就變得更 加重要。
升級到SQL Server 2005時,許多語法都發生了變化,還包括T- SQL相關的特性。舉例來說,當使用SQL Server 2005 NOLOCK語句時,你需要加上 WITH。測試出錯語法的方法有很多中,這裡介紹一個最直接的方法,就是針對所 有存儲過程使用ALTER命令,對T-SQL代碼進行重新編譯。但是這個方法無法找到 動態SQL中的語法錯誤,所以這裡沒有捷徑,你需要執行所有的數據庫代碼。
沒有認真閱讀升級白皮書。DBA進行SQL Server數據庫升級時,除了基本 的SQL Server在線手冊之外,還可以參考微軟提供的升級白皮書,該白皮書針對 了所有版本的SQL Server。盡管它看起來比較枯燥乏味,而且大部分內容你都不 一定能夠用到,但是從頭到尾閱讀一遍,將重點內容標注下了,我想這對DBA是有 百利而無一害的。
進行升級之前,需要弄清楚哪些功能在新的版本中是被 廢棄的,如果發現這樣的功能,DBA應該及時對相關代碼進行修改和調整。如果在 升級之前沒有多余時間閱讀白皮書,那麼一定要記住有些功能在下一個版本中是 無法運行的。
主觀認為現有硬件可以運行新版本數據庫。通常情況下,微 軟在發布每個新版本的SQL Server數據庫之前都會預先提供一些技術文檔,以向 用戶介紹新版本的數據庫有哪些新特性。許多DBA都會犯這樣的低級錯誤,就是他 們認為現有的硬件可以運行新的數據庫。大多數情況下,這樣的問題可能不會發 生,但是並不是所有服務器都能滿足新版本的硬件需求。
舉個例子,SQL Server 2005在系統配置要求上遠遠超過SQL Server 2000,從實際應用上來看, 有DBA表示服務器在升級SQL Server之後運行速度大大降低。微軟官方已經承認, 在極少數情況下,安裝SQL Server 2005之後數據庫性能不升反降。那麼找到真相 的唯一方法就是進行性能基准測試,你可以使用相同的服務器安裝不同版本的SQL Server,然後對應用性能進行對比。
另外我們還可以使用虛擬化技術來進 行對比,在一些情況下,數據庫軟件的升級也意味著硬件服務器同樣需要升級, 特別是服務器使用時間較長的時候,DBA應該充分考慮到硬件的問題。
沒 有更改兼容性版本。在進行數據庫升級時,DBA需要對兼容性級別進行設置,這使 得你可以在不更改語法的情況下運行新版本數據庫。當你從早期版本數據庫恢復 到新版本時,SQL Server將保留兼容性版本,也就是說它可以讓你運行那些無效 的語法。這個功能是為了讓DBA能夠有更多的時間對語法進行修改。
如果 你將數據庫設置在早期版本的兼容模式下,你可能會誤以為升級工作已經完成, 因為在測試的時候沒有出現任何問題。但是如果你之後再更改到新版本的兼容模 式下,T-SQL就會出現問題。因此一定要記住,你需要對所有數據(包括系統數據 庫)的兼容模式進行修改,當你需要運行之前版本的SQL Server時,你還可以改回 去。
沒有制定回滾計劃。無論你進行何種規模的數據庫升級,一定要確保 當遭遇故障時能夠對SQL Server進行回滾操作。“升級之前做好數據庫備份”是 所有DBA都知道的,但是說到容易做到難,特別是當你使用了復制之後,並不是每 個DBA都會恢復所有數據庫並redo所有SQL Server。
對於一個24/7運營的 企業來說,長時間宕機造成不必要的用戶流失可以說是無法接受的。在這些環境 下,數據庫升級需要最小的停機時間,而且DBA無法接受升級中出現各種各樣的錯 誤。為將風險降到最低,我們可以現在新的機器上運行SQL Server新的數據庫, 之前的機器還將運行。如果新的測試顯示出現重大問題,你還可以利用之前的設 置繼續工作,直到將所有的問題都解決為止。