多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

SQL Server 2005安装图解与SP3补丁部署避坑指南

SQL Server 2005安装图解与SP3补丁部署避坑指南 简介这份资源是面向数据库初学者与运维人员的 SQL Server 2005 安装图解教程重点解决版本选择、环境准备与补丁升级等上手难题。内容围绕 SQL Server 2005 的五个版本企业版、标准版、工作组版、开发版、Express 版展开对比说明各自适用场景并梳理软件平台要求Windows Installer 3.1、MDAC 2.8 SP1、.NET Framework 2.0 等与硬件配置门槛。教程还涉及与 SQL Server 2000 共存时的实例设置技巧、安装前关闭杀毒软件等注意事项以及 SQL Server 2005 SP3 补丁如 KB955706的安装流程帮助读者提升数据库安全性与性能。资源包为 1 个 docx 文档约 617KB以图文步骤形式呈现便于对照操作。目前已有 363 人学习下载适合需要快速完成 SQL Server 2005 部署与补丁升级的读者参考。1. 老版本数据库的安装为什么至今还有人踩坑SQL Server 2005 安装图解教程以及 SQL 2005 SP3 补丁安装图文教程这个标题放在今天看像是考古但实际场景一点都不罕见某高校实验室的旧教学系统、某公司十年前上线的内部管理平台、某工厂产线上的数据采集程序底层都还压着 SQL Server 2005。这些机器不能随便换数据库因为上层业务代码写死了连接串和驱动版本迁移成本远高于维护成本。所以每隔一段时间就有人要在一台新装的 Windows 系统上把 SQL Server 2005 重新装一遍再打上 SP3 补丁。问题在于SQL Server 2005 的安装程序对现代操作系统极不友好。它默认假设你跑在 Windows XP 或 Windows Server 2003 上对 UAC、.NET Framework 版本、IIS 组件、MSDTC 配置都有一套过时的预期。直接双击 setup.exe大概率卡在“性能计数器注册表一致性检查”或者“COM 目录要求”这类报错上。SP3 补丁的安装更玄学有时候提示成功但版本号没变有时候直接回滚日志里只留一行看不懂的 HRESULT。这篇内容面向两类人一是被迫维护旧系统的运维或开发需要一份能照着走完的安装流程二是想在自己机器上搭一个 SQL Server 2005 环境做兼容性测试的工程师。我会把安装前的环境准备、安装过程中的关键选项、SP3 补丁的正确打法以及几个血泪级别的坑按实际操作顺序讲清楚。不保证一次成功但能让你在翻车的时候知道该看哪个日志、改哪个注册表项。2. 安装前的环境准备与安装介质选择2.1 操作系统版本与补丁级别怎么选SQL Server 2005 官方支持的最后一个 Windows 版本是 Windows Server 2008 R2 和 Windows 7。如果你手头只有 Windows 10 或 Windows 11安装程序会在兼容性检查阶段直接拒绝或者装到一半蓝屏。常见做法是找一台 Windows 7 SP1 的虚拟机或者用 Windows Server 2008 R2。如果必须用更新的系统可以尝试在兼容模式下运行但成功率不高而且后续 SP3 补丁大概率装不上。具体版本选择上SQL Server 2005 有 Express、Workgroup、Standard、Enterprise 几个版本。做兼容性测试用 Express 就够了但注意 Express 版有 4GB 单库大小限制和 1GB 内存上限。如果旧系统用的是 Standard 或 Enterprise你最好装对应版本否则某些 T-SQL 语法和功能比如分区表、数据库镜像在 Express 上根本不存在测试结果没有参考价值。安装介质方面原版 ISO 一般包含两个目录Servers和Tools。Servers下是数据库引擎Tools下是管理工具和客户端组件。如果你只需要连远程数据库可以只装客户端工具如果要本地跑实例两个都要装。注意区分 32 位和 64 位介质x64 系统上装 32 位版本虽然能跑但后续打补丁时容易遇到 WOW64 相关的注册表问题。2.2 安装前必须处理的系统组件在运行 setup.exe 之前有几项系统配置必须手动完成否则安装程序会卡在检查阶段。第一启用 .NET Framework 3.5。SQL Server 2005 的安装程序依赖 .NET Framework 2.0而 Windows 7 及以上系统默认只带 4.x。你需要在“启用或关闭 Windows 功能”里勾选 .NET Framework 3.5或者用命令行离线安装。没有这一步安装程序启动后会直接报“无法加载 DLL”或“初始化失败”。第二配置 MSDTC。SQL Server 2005 的分布式事务协调器需要 MSDTC 服务正常运行并且要允许网络 DTC 访问。在“组件服务”里找到“我的电脑”右键属性在 MSDTC 选项卡里勾选“使用本地协调器”然后在安全配置里把网络 DTC 访问、允许远程客户端、允许入站、允许出站都打开。这一步不做安装过程中会报“COM 目录要求”错误而且这个错误不会阻止安装继续但装完后数据库引擎服务起不来。第三关闭 UAC 或以管理员身份运行。SQL Server 2005 安装程序对 UAC 的处理很糟糕即使你右键“以管理员身份运行”它内部调用的某些子进程仍然可能被虚拟化重定向。最稳妥的做法是临时把 UAC 调到最低装完再调回来。第四检查性能计数器注册表。这是最经典的报错点。安装程序会检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib下的Last Counter和Last Help值如果这两个值和Perflib\009下的计数器数量对不上就会报“性能计数器注册表一致性检查失败”。修复方法是用lodctr /r重建计数器或者手动把Last Counter和Last Help改成Perflib\009下Counter和Help的最大值。# 以管理员身份打开命令提示符重建性能计数器 lodctr /r # 如果报错先执行 cd C:\Windows\SysWOW64 lodctr /r # 然后检查注册表值是否一致 reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib /v Last Counter reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009 /v Counter逻辑说明lodctr /r会从系统备份中重建性能计数器注册表项把Last Counter和Last Help重置为正确值。如果 64 位系统上 32 位计数器有问题需要在SysWOW64目录下再执行一次。执行完后用reg query对比两个值如果不一致手动用reg add修改。参数说明/r表示从备份重建不需要额外参数。注意这个命令在 Windows 7 上可能需要先启用“性能日志和警报”服务否则会报“无法打开性能计数器”。2.3 安装介质的解压与启动方式不要直接在 ISO 挂载后的虚拟光驱里运行 setup.exe。SQL Server 2005 的安装程序在只读介质上运行时某些临时文件写入会失败导致安装中途报“无法写入临时目录”。正确做法是把 ISO 里的所有文件复制到本地硬盘的一个短路径目录下比如C:\SQL2005\路径里不要有中文和空格。复制完成后进入Servers目录找到setup.exe。右键选择“以管理员身份运行”。如果系统弹窗提示“此程序存在已知的兼容性问题”不要点“检查解决方案”直接点“运行程序”。安装程序启动后第一个界面是“最终用户许可协议”勾选接受下一步。接下来会进入“安装必备组件”阶段。安装程序会自动检测并安装 .NET Framework 2.0、MSXML 6.0、SQL Native Client 等组件。如果某个组件安装失败安装程序会停下来并给出提示。常见失败是 .NET Framework 2.0 在 Windows 7 上装不上因为系统已经带了更高版本。这时候可以跳过但后续安装可能会报错。如果报错手动安装 .NET Framework 3.5 后再重新运行 setup.exe。3. 安装过程中的关键选项与实例配置3.1 系统配置检查器的报错怎么处理安装程序进入“系统配置检查”阶段后会列出所有检测项。大部分项会自动通过但有几个高频报错需要手动处理。“性能计数器注册表一致性检查”失败按 2.2 节的方法修复。“COM 目录要求”失败检查 MSDTC 服务是否启动以及“组件服务”里的 DTC 安全配置是否完整。“IIS 功能要求”失败如果你不需要报表服务Reporting Services可以忽略如果需要去“启用或关闭 Windows 功能”里把 IIS 的“万维网服务”、“应用程序开发功能”下的 ASP.NET、ISAPI 扩展都勾上。还有一个容易被忽略的项“SQL Server 2005 最低要求”。如果系统是 Windows 7 SP1这一项会通过如果是 Windows 10会直接失败。这时候没有官方解决方案只能换系统或者用虚拟机。处理完所有报错后点击“重新运行”让检查器重新扫描。全部通过后点击“下一步”进入安装类型选择。3.2 实例名、服务账户与排序规则的选择安装类型选“默认实例”还是“命名实例”取决于你的旧系统怎么配的。如果旧系统的连接串写的是localhost或.那必须装默认实例如果写的是localhost\SQLEXPRESS或.\自定义名那就装命名实例。装错了连接串对不上应用直接报“找不到实例”。服务账户建议用“内置系统账户”里的Local System或Network Service。用域账户当然更规范但在测试环境里域账户经常因为权限问题导致数据库引擎启动失败。如果必须用域账户确保这个账户在本地安全策略里有“作为服务登录”的权限。排序规则Collation是另一个容易翻车的点。默认是SQL_Latin1_General_CP1_CI_AS但中文系统上旧数据库可能用的是Chinese_PRC_CI_AS。排序规则装错了查询时中文排序和比较结果会不对而且后期改排序规则需要重建数据库代价极大。安装前先确认旧库的排序规则用SELECT SERVERPROPERTY(Collation)查一下然后安装时选一样的。-- 在旧数据库上执行确认排序规则 SELECT SERVERPROPERTY(Collation) AS ServerCollation; -- 如果旧库还能连查数据库级排序规则 SELECT name, collation_name FROM sys.databases;逻辑说明SERVERPROPERTY(Collation)返回实例级排序规则sys.databases里的collation_name是数据库级排序规则。安装时选的排序规则要和实例级一致否则附加数据库时会报“排序规则冲突”。参数说明Chinese_PRC_CI_AS表示中文简体、不区分大小写、区分重音。如果旧库用的是Chinese_PRC_CS_AS安装时也要选对应的。3.3 身份验证模式与管理员账户配置身份验证模式选“混合模式”同时设置 sa 密码。纯 Windows 身份验证模式在测试环境里很麻烦因为你需要给每个连接用户配 Windows 账户。混合模式下应用程序可以用 SQL 账户连接更灵活。sa 密码要符合复杂度要求至少 8 位包含大小写字母、数字和符号中的三类。如果设得太简单安装程序会报“密码不符合策略”。设完后把密码记下来后面打 SP3 补丁和配置连接串都要用。在“指定 SQL Server 管理员”界面点击“添加当前用户”把当前 Windows 账户加进去。这样装完后你可以用 Windows 身份验证登录再用 sa 账户做其他配置。接下来是“排序规则”和“错误和使用情况报告”设置。错误报告建议关掉测试环境不需要往外部发数据。排序规则按 3.2 节确认的值选。3.4 安装完成后的服务状态检查安装程序跑完后会显示“安装成功”或“安装失败”。即使显示成功也要手动检查几个服务的状态。打开“服务”管理器确认SQL Server (MSSQLSERVER)或SQL Server (实例名)服务正在运行。如果没运行右键启动看报什么错。常见错误是“服务启动后立即停止”这通常是 MSDTC 没配好或者排序规则冲突。确认SQL Server Browser服务正在运行。这个服务负责把命名实例的端口信息告诉客户端如果它没启动客户端连命名实例时会报“找不到实例”。确认SQL Server Agent服务状态。如果你不需要定时任务这个服务可以停掉但默认是自动启动的。如果它启动失败检查服务账户权限。# 用命令行检查服务状态 sc query MSSQLSERVER sc query SQLBrowser sc query SQLSERVERAGENT # 如果服务没启动手动启动 net start MSSQLSERVER net start SQLBROWSER逻辑说明sc query查看服务状态STATE为RUNNING表示正常。net start手动启动服务如果启动失败会返回错误码用net helpmsg 错误码查具体原因。参数说明MSSQLSERVER是默认实例的服务名命名实例的服务名是MSSQL$实例名。SQLBROWSER是浏览器服务SQLSERVERAGENT是代理服务。4. SP3 补丁安装与版本号验证4.1 SP3 补丁包的获取与解压SQL Server 2005 SP3 补丁包是一个自解压的 exe 文件文件名类似SQLServer2005SP3-KB2494113-x64-ENU.exe。注意区分 32 位和 64 位以及语言版本。中文系统要下中文补丁包英文补丁包装上去会报“语言不匹配”。下载后不要直接双击运行。先把它解压到一个本地目录比如C:\SQL2005SP3\。解压方法是在命令行里执行SQLServer2005SP3-KB2494113-x64-ENU.exe /x然后指定解压路径。解压后你会看到setup.exe和一堆 msi 文件。# 解压 SP3 补丁包 SQLServer2005SP3-KB2494113-x64-ENU.exe /x:C:\SQL2005SP3 # 进入解压目录查看文件 dir C:\SQL2005SP3逻辑说明/x参数让自解压程序只解压不安装。解压后可以检查文件完整性也可以手动选择要安装的组件。参数说明/x:路径指定解压目标目录路径不要有空格和中文。如果补丁包是中文版文件名里会有CHS字样。4.2 补丁安装过程中的选项与报错处理进入解压目录右键setup.exe以管理员身份运行。补丁安装程序会先扫描已安装的 SQL Server 2005 实例然后列出可以打补丁的组件。默认全选直接下一步。安装过程中最常见的报错是“无法安装补丁因为找不到原始安装介质”。这是因为 SQL Server 2005 的补丁程序需要访问原始安装文件来更新某些组件。解决方法是在补丁安装界面出现“请提供原始安装介质路径”时把路径指向你之前复制到本地的C:\SQL2005\Servers\目录。另一个高频报错是“性能计数器注册表一致性检查失败”和安装时一样按 2.2 节的方法修复后再重新运行补丁程序。如果补丁安装到一半回滚去C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\下找Summary.txt和Detail.txt。Summary.txt会给出最终结果和错误码Detail.txt里有详细的执行日志。常见错误码1642表示“无法启动服务”通常是服务账户权限问题29506表示“安装程序被另一个进程锁定”重启机器后再试。4.3 补丁安装后的版本号验证方法补丁装完后必须验证版本号是否真的变了。SQL Server 2005 的版本号规则是RTM 是 9.00.1399SP1 是 9.00.2047SP2 是 9.00.3042SP3 是 9.00.4035SP4 是 9.00.5000。如果你装的是 SP3版本号应该是 9.00.4035 或更高如果叠加了后续累积更新。验证方法有两种。第一种是用 SQL Server Management Studio 连接实例执行SELECT VERSION。返回的字符串里会包含版本号。第二种是查注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\CurrentVersion下的CurrentVersion值。-- 方法一用 T-SQL 查版本 SELECT VERSION AS VersionInfo; -- 方法二查具体版本号 SELECT SERVERPROPERTY(ProductVersion) AS ProductVersion, SERVERPROPERTY(ProductLevel) AS ProductLevel, SERVERPROPERTY(Edition) AS Edition;逻辑说明VERSION返回完整版本字符串包含操作系统版本和 SQL Server 版本。SERVERPROPERTY返回更结构化的信息ProductLevel会显示RTM、SP1、SP2、SP3或SP4。参数说明ProductVersion是纯版本号比如9.00.4035.00。ProductLevel是补丁级别装完 SP3 后应该显示SP3。如果显示RTM说明补丁没装上。如果版本号没变检查补丁安装日志里是否有“已成功安装”但实际跳过的组件。有时候补丁程序会检测到某个组件已经是最新版本然后跳过但其他组件没更新。这时候需要手动指定要更新的组件或者用命令行参数强制重新安装。5. 安装与补丁部署中的避坑清单5.1 性能计数器报错反复出现现象安装或打补丁时系统配置检查器反复报“性能计数器注册表一致性检查失败”执行lodctr /r后暂时通过但重启后又出现。原因Windows 系统的性能计数器注册表项被其他程序比如某些监控软件、杀毒软件修改过导致Last Counter和Last Help值与实际计数器数量不一致。lodctr /r只是临时重建如果修改源还在重启后又会不一致。解决先卸载或禁用可能修改性能计数器的第三方软件然后执行lodctr /r再手动检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009下的Counter和Help值把Perflib下的Last Counter和Last Help改成一样的值。改完后重启再运行安装程序。5.2 补丁安装成功但版本号不变现象SP3 补丁安装程序显示“安装成功”但用SELECT VERSION查还是 RTM 版本。原因补丁程序可能只更新了客户端组件没有更新数据库引擎。或者补丁程序检测到某个条件不满足跳过了核心组件的更新但最终结果仍然显示成功。解决去C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\下打开Summary.txt看每个组件的最终状态。如果数据库引擎组件的状态是“已跳过”或“不适用”说明补丁没打到引擎上。这时候需要用命令行参数指定只更新数据库引擎或者先卸载补丁再重新安装。# 用命令行强制更新数据库引擎组件 C:\SQL2005SP3\setup.exe /ACTIONPATCH /INSTANCENAMEMSSQLSERVER /QUIET # 查看补丁日志 type C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Summary.txt逻辑说明/ACTIONPATCH指定执行补丁操作/INSTANCENAME指定实例名/QUIET表示静默安装不弹界面。执行后检查Summary.txt里数据库引擎组件的状态。参数说明MSSQLSERVER是默认实例名命名实例要改成实例名。/QUIET可以换成/QUIETTRUE效果一样。5.3 安装完成后服务无法启动现象安装程序显示成功但SQL Server (MSSQLSERVER)服务启动后立即停止事件日志里报“排序规则冲突”或“无法加载数据库”。原因安装时选的排序规则和 master 数据库的排序规则不一致或者安装过程中 master 数据库文件损坏。解决先看 Windows 事件查看器里的应用程序日志找到 SQL Server 的错误信息。如果是排序规则冲突需要重建 master 数据库。重建方法是进入C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\运行setup.exe /ACTIONREBUILDDATABASE /INSTANCENAMEMSSQLSERVER /SQLCOLLATIONChinese_PRC_CI_AS /SAPWD你的sa密码。重建会清空所有用户数据库只保留系统数据库所以只适用于新装环境。5.4 客户端连接报“找不到实例”现象数据库服务正常运行但应用程序连接时报“SQL Server 不存在或访问被拒绝”或“找不到实例”。原因SQL Server Browser 服务没启动或者防火墙挡住了 UDP 1434 端口。命名实例的端口是动态分配的客户端需要通过 Browser 服务查询端口号。解决启动SQL Server Browser服务并在防火墙里放行 UDP 1434 和 TCP 1433默认实例或动态端口。如果不想开 Browser 服务可以在连接串里直接指定端口号比如Serverlocalhost,1433。5.5 SP3 补丁与后续累积更新的顺序现象先装了 SP3又装了某个累积更新结果版本号显示混乱或者某个功能报错。原因SQL Server 2005 的补丁是累积的SP3 之后还有多个累积更新CU。如果先装 CU 再装 SP3SP3 会覆盖 CU 的部分文件导致版本号回退或功能异常。解决正确的顺序是先装 SP3再装 SP3 之后的累积更新。装完后用SELECT VERSION确认版本号是递增的。如果顺序装反了卸载所有补丁从 SP3 开始重新装。6. 用脚本批量验证补丁级别与实例健康状态装完 SQL Server 2005 和 SP3 之后如果你要管多台机器手动一台台查版本号太慢。我一般会写一个 PowerShell 脚本批量查所有实例的版本号、补丁级别和服务状态输出成表格一眼就能看出哪台没打补丁、哪台服务没起来。# 批量检查 SQL Server 2005 实例版本与补丁级别 $servers (localhost, 192.168.1.101, 192.168.1.102) $results () foreach ($server in $servers) { try { $conn New-Object System.Data.SqlClient.SqlConnection $conn.ConnectionString Server$server;Integrated SecurityTrue;Connect Timeout5 $conn.Open() $cmd $conn.CreateCommand() $cmd.CommandText SELECT SERVERPROPERTY(ProductVersion) AS ProductVersion, SERVERPROPERTY(ProductLevel) AS ProductLevel, SERVERPROPERTY(Edition) AS Edition, SERVERPROPERTY(Collation) AS Collation $reader $cmd.ExecuteReader() while ($reader.Read()) { $results [PSCustomObject]{ Server $server ProductVersion $reader[ProductVersion] ProductLevel $reader[ProductLevel] Edition $reader[Edition] Collation $reader[Collation] } } $conn.Close() } catch { $results [PSCustomObject]{ Server $server ProductVersion 连接失败 ProductLevel - Edition - Collation - } } } $results | Format-Table -AutoSize逻辑说明脚本遍历服务器列表用System.Data.SqlClient建立连接执行SERVERPROPERTY查询获取版本信息。如果连接失败记录“连接失败”而不是直接报错退出这样一台机器连不上不影响其他机器。最后用Format-Table输出表格。参数说明$servers数组里填你要检查的服务器地址可以是 IP 或主机名。Connect Timeout5表示连接超时 5 秒避免卡在不可达的机器上。Integrated SecurityTrue表示用当前 Windows 账户认证如果目标机器上没这个账户改成User IDsa;Password你的密码。这个脚本跑完你会得到一张表。ProductLevel列显示SP3的机器是正常的显示RTM或SP2的需要补打补丁。ProductVersion列可以进一步确认具体版本号比如9.00.4035.00是 SP3 的标准版本。Collation列用来核对排序规则是否和旧系统一致。我自己的习惯是把这个脚本存成Check-SQL2005Patch.ps1每次新装完一台机器就跑一遍确认版本号和服务状态都对了再交付。有一次偷懒没跑结果一台机器的 SP3 补丁只更新了客户端组件数据库引擎还是 RTM应用连上去报“不支持某个 T-SQL 语法”排查了半天才发现是补丁没打全。从那以后不管多急装完必跑这个脚本版本号不对就不往下走。希望帮到你。本文还有配套的精品资源点击获取
返回列表