从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联机丛书》