从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 原地升級與平行遷移的優缺點
| ? | 原地升級 | 平行遷移 |
| 優點 |
|
|
| 缺點 |
|
|
?
????? 可升級或遷移的版本如下
- 數據庫版本: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聯機叢書》
轉載于:https://www.cnblogs.com/romance/archive/2010/10/13/1849871.html
總結
以上是生活随笔為你收集整理的从SQL Server 2000/2005到SQL Server 2008的升级测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将Sql Server中的数据表导入
- 下一篇: 360 与QQ 互掐 受害的却是用户