1. 程式人生 > >從SQL Server 2000/2005到SQL Server 2008的升級測試

從SQL Server 2000/2005到SQL Server 2008的升級測試

 本文部分內容摘自《SQL Server 2008管理實戰》,人民郵電出版社;《深入MSSQL 2008升級和應用程式的相容性》,IT專家網;《SQL Server 2008聯機叢書》 ,主要整理了如何把SQL Server 2000/2005升級到2008。

      如果系統不大,資料庫設計簡單,只有單純的資料表,其他資料庫物件不多,且應用系統設計不復雜,你也許可以直接將資料庫複製或備份,再到SQL Server 2008執行附加或還原資料庫,然後更新索引統計,設定資料庫相容性。或是通過安裝程式,就地將SQL Server2000/2005直接升級到SQL Server 2008即可。但如果資料庫龐大,系統複雜,則最好先完成升級測試後,再按照系統需求,擬定升級計劃,照計劃一步步實施。

      一般情況下,SQL Server 2005與SQL Server 2008的版本相容性相當高,2005升級到2008一般沒什麼問題。但2000升級到2008版本,可能需要先行測試,這兩者差異比較大,包括:伺服器內建的系統物件、T-SQL語法定義、新增的關鍵詞、禁用的功能等,相距兩版後較會有相容性的問題。

      在升級測試之前應先評估需求,列出有用到哪些功能,如資料庫引擎、Analysis Services、Reporting Services、SSIS/DTS、叢集等大項,以及Replication、Log Shipping、全文檢索等詳細功能。另外,評估資源需準備隔離的測試環境,由於資料庫往往是企業系統的核心,不宜貿然測試或更改架構,輕則影響效能,重則毀損資料。評估可否建立獨立的測試環境,瞭解可用的工具,編寫測試計劃,準備妥當後再開始測試。

  • 在新舊版本的相容性上會有以下的情況:
  • 不再支援的一些功能。
  • 此版仍支援,但最好換新功能來實現,因為設計理念較佳,且未來可能不再支援舊版功能。

      而這些版本升級的細節可以參考聯機叢書:

“入門(SQL Server 2008)”-->“初始安裝(SQL Server 2008)”-->升級到SQL Server 2008

1. 升級還是遷移

      升級(Upgrade或稱為就地升級in-place upgrade)指的是直接通過安裝程式(setup.exe)對一機器上之前版本的程式進行升級,可保留使用該版本的各種資料內容,與各種資料物件的設計。同時,服務例項的名稱不變,整個轉換的操作在安裝過程中會自動執行完畢。

      遷移(Migration或稱為平行遷移side-by-side migration)指的是在同一臺機器,或是另一臺機器上安裝全新的伺服器程式例項。在同一時空中,不同版本的新舊例項同時存在。這時可以通過複製、遷移等方式將原例項的資料物件複製到新的例項中。這需要較多手動操作處理,但可以控制整個轉換過程。

      兩種方式各有其優缺點,如表1.1所示。

表1.1 原地升級與平行遷移的優缺點

原地升級

平行遷移

優點

  • 簡單、快速
  • 比較適用於快速系統遷移
  • 不用額外另購新的硬裝置
  • 應用程式不用改變,使用一樣的例項名稱
  • 遷移的過程中資料庫管理員(DBA)有較多控制權,且可獨立的對各資料庫物件一對一地遷移,單獨進行驗證與測試
  • 遷移過程中原例項仍可以繼續提供服務

缺點

  • 資料庫管理員難以主動控制各項訪問細節
  • 升級過程中例項會需要停止再重新啟動
  • 並非對所有的元件都是最佳的方法,例如,分析服務的CUBE建議適用遷移方式較佳
  • 可能需要額外的硬體或是相關資源,尤其當你有幾Tera資料時,可能很耗資源
  • 應用程式必須重新導向新的例項名稱

      可升級或遷移的版本如下

  • 資料庫版本:SQL Server 2000/2005(加上最新的Service Pack)
  • 可升級元件:SQL Server是多個工具與服務整合的,因此在升級時,需要個別考慮這些工具與服務的狀況。

              資料庫整體:代理程式,全文檢索,系統工具等。

              分析服務(Analysis Services)。

              報表服務(Reporting Services)。

              資料轉換服務(Data Transformation Services)與資料整合服務(SQL Server Integration Services)。

              SQL Server 2008不再提供通知服務(Notification Services)。

  • 操作平臺與版本:SQL Server 2008對Windows 2003以上的平臺,以及32位與64位(IA64和x64)皆提供支援。

2. 升級測試概念

      升級測試的概念主要如下。

  • 備份應用系統的資料庫。
  • 錄製應用程式訪問SQL Server的方式。
  • 將備份的資料庫還原到兩臺與聯機系統相同環境的SQL Server例項上,一個例項維持舊環境,當作對照比較的基準(Baseline),另一個例項將升級到SQL Server 2008(Test),驗證升級過程順暢與否,觀察升級前後各項設定值,最重要的是已有訪問方式是否相容。
  • 選擇對其中的一個例項執行SQL Server 2008安裝程式額外提供的“升級顧問”工具程式,以內建的規則分析既有的資料庫物件與訪問的語法。
  • 用錄製的結果對基準值的例項回放(Replay),並同時再錄製回放時SQL Server所輸出的結果。
  • 通過SQL Server 2008的安裝程式,將另一個SQL Server 2000/2005例項就地升級到SQL Server 2008。
  • 同樣對新的SQL Server 2000/2005例項回放先前錄製的跟蹤,也錄製SQL Server 2008的輸出結果。
  • 比較SQL Server2000/2005版對回放的輸出和SQL Server 2008的輸出是否有錯誤或是不同。若有不同,檢視其原因。

      整個測試流程比較複雜,微軟SQL Server團隊因而與Scalability Expert公司合作開發出“SQL Server Upgrade Assistant 2008(以下簡稱SSUA)”工具程式,其中有各步驟的指引,對升級測試有很大的幫助。

      若有較為完善地錄製應用程式平常訪問SQL Server的方式,需儘量包含應用程式不同功能的各式訪問語法,而非重複大量的操作。若僅是錄製日常應用程式與SQL Server的互動,可能會得到大量重複的語法,但卻沒有完整側錄到應用程式訪問資料庫的所有方式。這將浪費回放測試的時間,且側錄也影響聯機系統的訪問效能,卻無法完整涵蓋所有問題。所以最好是在測試環境中,以該應用系統原有的測試流程進行訪問,或是人工操作所有的功能,以此錄下的資料庫訪問方式較能完整驗證升級到SQL Server 2008後是否會有問題。

      注意,一旦對某個例項執行過回放測試後,就不要對相同的例項再執行一次。因為先前執行過的DDL或DML的新增、修改或刪除語法已經改變了自備份 / 還原後的資料庫內容。回放後再回放,可能引發違反唯一限制(第一次回放時已經新增)、物件已存在(第一次回放時已經建立)或物件不存在(第一次回放時已經刪除)等各種錯誤,但這些錯誤並非升級錯誤,而導致誤判。

      SQL Server 2000/2005升級到SQL Server 2008的一般工作流如圖2.1所示。

 

圖2.1 SQL Server 2000/2005升級到SQL Server 2008的一般工作流

      SQL Server 2000/2005升級到SQL Server 2008的完整工作流如圖2.2所示。

 

圖2.2 SQL Server 2000/2005升級到SQL Server 2008的完整工作流

3. 升級測試實戰

      先從Scalability Expert網站下載並安裝SSUA工具程式,網址如下:

http://www.scalabilityexperts.com

      SSUA需要.NET Framework 2.0外,它是靠SQL Server 2008的Trace/Profiler來錄製與回放SQL Server的訪問,使得在SQL Server 2000的機器上不需要SQL Server 2008資料庫引擎,但要安裝SQL Server 2008安裝程式嚮導中所提供的“管理工具”,如圖3.1所示。

 

圖3.1 安裝SQL Server 2008的前臺管理工具

      另外,還要安裝“SQL Server 2008升級顧問”工具程式。通過SQL Server 2008的安裝程式介面,在“計劃”頁面中的“安裝升級顧問”選項單獨安裝SQL Server 2008升級顧問工具程式。它可以獨立執行在其他機器上,而後在執行工具程式時指定需要分析的資料庫位置,遠端分析SQL Server例項,而不需要與SQL Server一同安裝。聯機叢書如下路徑內,有安裝升級顧問工具程式的軟硬體需求:

入門(SQL Server 2008)-->初始安裝(SQL Server 2008)-->升級到SQL Server 2008-->使用升級顧問來準備升級

      如上所述,“升級顧問”工具程式並不需要與想升級的SQL Server裝在一起,但如果要掃描Reporting Services例項,則必須將升級顧問安裝在報表伺服器上。若要分析Analysis Service 2000,則工具所在系統需要安裝DSO(Decision Support Object),這可以從SQL Server 2000安裝光碟上選擇安裝。另外,若要分析DTS,則需要安裝SQL Server 2000的客戶端工具程式(Client Components)。

      SSAU所訪問的SQL Server 2000例項需安裝到Service Pack 4,並需準備與SQL Server 2000可對應升級的SQL Server 2008軟體(例如,要升級SQL Server 2000中文企業版,就需要準備2008的中文企業版)。

      下面將以多個SQL 2000例項來示範升級測試。首先啟動SSUA工具程式,安裝完畢後,啟動SQL Server Upgrade Assistant 2008。

3.1.  錄製步驟

  • 當啟動SSUA工具程式後,它將執行以下的操作。
  • 查詢指定伺服器的相關設定。
  • 備份指定SQL Server例項所有的資料庫。
  • 開始跟蹤伺服器的訪問記錄。
  • 等待使用者停止跟蹤。
  • 回報獲取資料的進度。

      當啟動SSUA會備份例項上所有的資料庫,因此,若指定的SQL Server例項上尚有與升級測試不相關的資料庫,且所佔容量很大,或許可以考慮先停止訪問不相干的資料庫,並將其解除安裝,避免回放測試時,在目標SQL Server例項要安裝用不到的大型資料庫。

      設定完畢後 ,開啟SSUA並單擊左下方“Upgrading Action”選項內的“Upgrade from 2000 to 2008”連線,設定是要獲取SQL Server 2000的資料庫和前臺應用程式訪問,如圖3.2所示。

 

圖3.2 設定要獲取的SQL Server版本

      單擊“Upgrade from 2000 to 2008”連線後,SSUA左上方的粗體字會換成“SQL Server 2000”,如圖3.3所示。

 

圖3.3 從SQL Server 2000升級

      接著單擊左上方的“Capture Playback”,設定要連線的SQL Server例項名稱與登入連線方式,並設定存放資料庫備份與跟蹤資料的目錄,而需要確定的是SQL Server的服務帳號有許可權寫資料到指定目錄。設定完資料庫連線與檔案目錄後,單擊中間的“Capture Playback”按鈕就可以開始獲取資料,如圖3.4所示。

 

圖3.4 備份資料庫與啟動對SQL Server的跟蹤

      資料庫備份完畢後,SSUA會隨即啟動SQL Server的跟蹤功能,並彈出如圖3.5所示的對話方塊,待我們演練完訪問SQL Server後,可以單擊該對話方塊的“確定”按鈕,在隨後的對話方塊單擊“是”按鈕,結束SQL Server的獲取錄製。

 

  圖3.5 SSUA通過對話方塊呈現持續跟蹤狀態

      若不小心單擊到圖3.5所示的“確定”按鈕,在隨後的對話方塊中單擊“否”便會回到圖3.5的對話方塊等待狀態。

      停止跟蹤獲取後,可以到你之前指定存放資料的目錄,將會發現SSUA在該目錄下除了放置SQL Server例項內各資料庫的備份(.bak)與跟蹤記錄(.trc)外,尚有該例項的各項設定(.out),以及產生登入帳號的T-SQL Script和獲取程式的版本,如圖3.6。其中,.out和.sql可以在你恢復系統或執行回放測試時,若發生資料庫設定或登入帳號錯誤而需要修正,可提供參考的資訊。

 

圖3.6 錄製完成後,指定存放資料的目錄

      升級程式最後以應用程式訪問SQL Server的方式在新版的環境中執行,但有些行為可能無法完整錄製,例如:BULK copy。所以錄製完畢後,可能需要稍微檢視一下內容,確認錄製的訪問行為的覆蓋率。

      在升級測試實驗中,有的人放在聯機系統上,錄製應用程式一天對SQL Server的訪問,結果錄的是Giga的訪問記錄,但大多是重複的讀取,游標來回運作,導致回放驗證時耗費相當長的時間。但因為是重複相同的訪問,對相容性測試而言,意義不大。且若未完整涵蓋訪問方式,遺漏了不相容的操作就更糟了。

      錄製完畢後,將之前取得的資料完整複製到待驗證與比對的兩個例項所在機器上,進行下一階段的系統回覆、回放(Playback)測試與驗證。

3.2.  回放測試

      由於SSUA也是呼叫SQL Server 2008的Trace/Profiler來回放先前的錄製,若你是單獨對獨立的SQL Server 2000伺服器執行回放,則該機器除了安裝SSUA外,還要如同圖3.1所示準備錄製的環境時,額外安裝SQL Server 2008的管理工具。

      步驟一:設定基準和升級測試兩個SQL Server例項

      啟動SSUA工具程式,在基準(Baseline)與升級測試(Test)兩個例項恢復先前備份的資料庫,設定畫面如圖3.7所示。

 

圖3.7 將備份資料庫還原到用做比較基準SQL Server例項

      在圖3.7所示的“Server Name”文字框中指定了測試基準用的SQL Server例項後,在“Playback Source Directory”文字框指定存放先前備份資料所放的目錄,並在“Restore Database Directory”文字框指定預恢復資料庫的mdf、ndf和ldf檔案的目錄。最後,單擊“Setup Playback”按鈕即可開始恢復操作。

      還原獲取的資料庫後,也儘量還原之前系統的執行環境,尤其若應用程式使用了擴充套件儲存過程、連結伺服器等非個別資料庫的功能,而是在master或msdb系統資料庫內添加了功能,甚至在作業系統上額外安裝其他應用程式。

接下來,可以同時恢復另一個升級測試用的SQL Server例項(Test)。步驟與前述方式相同,但在“Restore Database Directory”文字框要指定不同的目錄。

      步驟二:針對基準SQL Server例項執行SQL Server 2008升級顧問相容性分析

      在升級測試用的SQL Server例項(Test)的同時,可以呼叫“SQL Server 2008升級顧問”工具程式檢驗已經恢復資料庫的基準SQL Server例項(Baseline)。升級顧問主要提供兩項功能,一是掃描既有的SQL Server相關產品,另一是以報表顯示分析結果。其初始畫面如圖3.8所示。

 

圖3.8 通過SQL Server 2008升級顧問工具程式檢查各項

                                             SQL Server舊版服務是否會有升級不相容的問題

      單擊圖3.8下方“啟動升級顧問分析嚮導”連結呼叫嚮導,跳過該向導的歡迎畫面後,接著進入到“SQL Server元件”步驟,如圖3.9所示。

 

圖3.9 通過“升級顧問”檢驗資料庫的設計,以及應用程式的訪問方式

是否與2008版SQL Server不相容

      在圖3.9上方的“伺服器名稱”欄位,輸入想要測試的網路上SQL Server例項名稱,該例項不需要與嚮導裝在同一臺機器。接著可通過右上方“檢測”按鈕,檢測其上已經有哪些服務可供分析。嚮導會詢問你想要連線在該機器上的哪個SQL Server例項,以及登入SQL Server例項的方式與帳號/密碼資訊。

      在圖3.9的“SQL Server引數步驟”中,還可以一併提供SQL Server伺服器端錄製;或是 通過Profiler工具程序錄制的跟蹤檔案(Trace file),以及日常執行的T-SQL批處理檔案,藉以分析這些SQL語法對資料庫的訪問在SQL Server 2008是否有相容性問題。一切選擇無誤後就可以開始分析。

      升級顧問針對SQL Server所提供的主要服務已經內建了多項的相容性規則,以逐條掃描服務例項所含的物件是否有不相容的狀況。而在“升級顧問進度”步驟會呈現分析進度。待檢測完畢後,通過單擊右下角的“啟動報表”按鈕呼叫如圖3.10所示的分析結果報表。

 

圖3.10 升級顧問分析完畢後,會提出相容性的報表

      在報告中,可以選擇不同的服務,並檢視問題的說明、與問題相關的物件有哪些、對應解決辦法等資訊,並在處理某項問題過後重新呼叫報告,勾選該問題是否已經解決。階段性地修改完畢後,應當重新再用升級顧問掃描一次,檢視是否還有問題。如此迴圈測試,直到無大問題為止。以下是本次掃描到的問題的對應解決方法,如圖3.11、圖3.12、圖3.13。

 (略)

圖3.11 “升級將導致全文搜尋在預設情況下使用例項級(而非全域性)

斷字元和篩選器”解決辦法

 (略)

圖3.12 “全文搜尋在SQL Server 2008中已發生更改”解決辦法

 (略)

圖3.13 資料庫引擎的其他升級問題

      若升級顧問有檢測出明顯與SQL Server 2008不相容的使用方式,你可能要停止繼續的測試,因為若是T-SQL語法或系統功能有嚴重的不相容,你會需要先研究如何分階段地修改資料庫和應用系統。

      步驟三:將測試用的SQL Server 2000例項升級到SQL Server 2008

      升級測試用的SQL Server例項(Test)在恢復完資料庫後,可以進行就地升級到SQL Server 2008,雖然圖7的左方中間有一個“Upgrade Test Server to 2008”的選項,但這僅是提醒你要利用SQL Server 2008的光碟來升級。開啟SQL Server 2008的安裝程式Setup.exe後,其設定畫面如圖3.14所示。

 

圖3.14 通過SQL Server 2008安裝光碟來升級SQL Server舊版本

      單擊圖3.14所示中“從SQL Server 2000或SQL Server 2005升級”選項後,就可以按照嚮導的指示,逐步安裝與升級原有的SQL Server 2000/2005例項。只要安裝程式所做的檢測正確無誤,其升級過程都應該很順利。若檢測有問題,其提示也會很清楚,在此不再列舉。

      步驟四:針對基準SQL Server 2000例項進行回放測試

      在SSUA工具程式中單擊左方的“Run Trace Replay”選項,對基準SQL Server 2000例項(Baseline)進行回放測試,如圖3.15所示。

 

圖3.15 對基準SQL Server 2000例項進行回放測試

      在圖3.15的“Server Name”文字框指定了測試基準用的SQL Server例項後,在“Playback trace file”文字框指定存放先前錄製跟蹤所在目錄與檔案,並在“Trace output file”文字框指定對基準SQL Server 2000例項回放跟蹤時,其輸出內容所放置的目錄檔案。最後,單擊“Replay Trace”按鈕即可開始對基準SQL Server 2000例項回放跟蹤,最下方的進度條會顯示已執行了多少跟蹤記錄。

      步驟五:針對測試用SQL Server 2008例項進行回放測試

      當測試用的SQL Server 2000例項(Test)成功升級到SQL Server 2008版本後,就可以用SSUA對新的SQL Server 2008執行步驟四相同的回放測試。其設定與前一步驟近似,如圖3.16

 

圖3.16對測試用SQL Server 2000例項進行回放測試

      步驟六:比較兩個例項回放測試的結果

      當步驟四、五的回放測試都完成後,可以單擊SSUA的“Compare trace files”選項,讓SSUA比較步驟四、五針對回放所錄製的SQL Server 2000/2008的反應,通過比較其中的異同,可以分析是否會有不相容的狀況出現,如圖3.17所示。

 

圖3.17 比較前後兩版SQL Server對相同的訪問方式是否有不同結果

      在圖3.17上方的“Server Name”文字框指定一個SQL Server例項(新舊版本的SQL Server皆可),因為SSUA在比較結果時,會需要先建立一個臨時的資料庫,以分析兩個跟蹤結果的異同。而在“SQL Server 2000 trace file”和“SQL Server 2008 trace file”兩個文字框中分別設定步驟四、五所產生的跟蹤檔案。然後便可以單擊圖3.17中間的“Compare Traces”按鈕,以比較並建立結果檔案。

      最後,可以單擊圖3.17中間的“Final Analysis”選項內的“View trace differences”功能,呼叫“Playback Report Viewer”工具程式,以顯示回放錄製內的錯誤資訊或差異,如圖3.18所示。

 

圖3.18 通過“Playback Report Viewer”工具程式

      除了通過SSUA的回放測試外,當聯機系統真的升級後,由於生產環境可能與測試環境不大相同,最好還要先擬定升級後最起碼的確認事項。

4. 升級後的確認

      升級完成後可能需要執行升級顧問報表中所有的後續操作,以及調整先前版本的設定。例如:更新統計資訊,更改SQL Server內各資料庫相容版本(從80/90換到100),因為預設直接升級上來的資料庫會停在之前的版本。檢視代理程式的工作與資料庫維護計劃操作,重新設定事務日誌傳送(Log Shipping),以及Analysis Services可能需要重建部分Cube,而SSIS需要檢視資料轉換服務(DTS)與SSIS的封裝遷移是否可行等。

      這裡引用聯機叢書,升級為SQL Server 2008之後,需要完成的工作如下所述。

  • 註冊伺服器:升級會移除先前SQL Server例項的登入設定。升級之後,必須重新註冊伺服器。
  • 更新統計資訊:若要協助優化查詢效能,建議在升級之後,更新所有資料庫的統計資料。請使用sp_updatestats儲存過程來更新SQL Server資料庫中使用者定義資料表的統計資料。
  • 更新使用方式計數器:在舊版SQL Server中,資料表和索引資料行計數與頁面計數的值可能會變成不正確。若要更正任何無效的資料行或頁面計數,建議在升級後,針對所有資料庫執行DBCC UPDATEUSAGE。
  • 設定新的SQL Server安裝:為了減少系統可攻擊介面區,SQL Server會選擇性地安裝及啟動主要服務和功能。

      關於最後一點,例如以sp_configure系統儲存過程檢視自2000升級到2008的例項,由於SQL Server 2000預設會開啟“Ole Automation Procedures”和“xp_cmdshell”等強大功能,但若有SQL Injection也會造成重大漏洞的擴充套件儲存過程。升級SQL Server 2008後會維持啟用的狀態,這部分仍需要手動關閉。

      若檢視無誤後,可以開始進行之前計劃的升級後測試,測試無誤才啟動原有應用程式,並持續一段時間監控系統活動與效能。而需要測試些什麼呢?最起碼確定新架構本身功能是否正常、應用程式是否訪問與執行無誤、舊有功能是否都可以使用、系統性能是否符合期待。此部分不一定搭配先前通過Profiler工具程序錄制的跟蹤檔案,因為直接重複執行所錄製的語法,可能會重複新增和修改的操作,而造成資料錯誤。

      另外,新架構下的系統質量,如備援、效能、穩定性與安全性等,也需要重新檢視。最後,還可以測試一下是否可以用新功能取代舊功能,重新設計與編寫應用程式,以發揮SQL Server 2008最大效用。

總結

      這個升級測試的步驟是搭配SSUA工具程式而設計的,其先行錄製應用程式訪問SQL Server的方式,然後重複執行與比對,或許整個流程有些麻煩。若應用程式系統本來就有編寫測試計劃,或可直接將舊的SQL Server版本在測試環境升級後,通過應用系統的自動化測試流程就可驗證。但若沒有測試計劃與流程,則通過上述的做法,可以節省重複執行測試動作時的人力,只要第一次訪問操作的錄製夠徹底,就可以有一定質量的保證。

      最後,本文未提及升級失敗的退回步驟。這將會因為個人的商業邏輯、先行軟硬體環境與公司規章而大有不同。但在做任何系統上的變革,若系統稍具規模,且有一定重要性,則任何變更最後都應有失敗的應變計劃,且需要先驗證該應變計劃是確實可行的。

參考文獻

《SQL Server 2008管理實戰》,人民郵電出版社

《深入MSSQL 2008升級和應用程式的相容性》,IT專家網

《SQL Server 2008聯機叢書》