看到这个标题点进来的朋友,我猜你现在八成是在帮某个老项目擦屁股,或者被领导安排去接手一台年代感十足的服务器。别问我怎么知道的,SQL Server 2005 这个 2005 年发布、2016 年 4 月就停止扩展支持的老家伙,到今天仍然会在各种企业的角落里顽强运行——制造业的 MES、老 ERP、HR 系统、历史财务数据库,一跑就是十几年,系统管理员换了好几任,数据库还是 9.00 系列。更常见的情况是:你手上有一份多年的 .bak 备份文件,要临时搭一个环境把数据拉出来看看,结果发现网上的教程缺步跳步严重,尤其是 SP4 补丁这个环节,很多教程根本不提,装完要么版本不对、要么有安全漏洞、要么后续功能用不了。这篇文章我就把从零安装 SQL Server 2005(含 SP4 补丁)的全过程,按我实际操刀的路子完整捋一遍,包括每个界面怎么选、补丁怎么打、装失败怎么定位、装完之后下一步该干什么,给你一条能直接照抄的路线。
1. 谁在2020年代还要装SQL Server 2005?——先确认你走对路了
很多人看到 SQL Server 2005 的第一反应是"这玩意儿还有人用?"。实话实说,如果你是要给新项目选数据库,我劝你趁早关掉这篇文章,去装 SQL Server 2019 或者 2022。但如果你和我一样,是接手老系统的运维、做历史数据迁移、或者在虚拟机上复现一个十几年前的生产环境,那 SQL Server 2005 不仅绕不开,还是整套方案里最麻烦的一环。
1.1 还在用2005的五类真实场景
还在折腾 SQL Server 2005 的人,大概逃不出下面这几种情况:
- 存量业务系统的数据库不能随便动。很多制造业的 MES 系统、老 ERP、HR 系统、实验室 LIMS 系统,当年上线时用的是 SQL Server 2005,软件开发商早就不维护了,或者升级报价高得离谱,于是数据库就这么一直跑着。
- 历史备份文件需要临时还原。手里攥着一份多年前的 .bak 或 .mdf 文件,客户让你把数据导出来。这时候最快的办法不是往新版本上硬还原,而是本地装一台 2005 先把库打开。
- 教材和实验课还在用。部分高校的数据库课程、培训机构的老教材,实验环境还是 2005,学生得在虚拟机里装一套交作业。
- 老工程师排障复现。生产库版本太老,新工具连不上,需要搭一套一模一样的本地环境,复现问题、分析日志。
- 数据迁移的中间跳板。要把 2005 的数据迁到高版本,有时候需要先在迁移机器上装一个 2005,把库还原出来,再用备份或 Detach/Attach 方式往上升。
不管是哪种情况,结论都是一样的:SQL Server 2005 虽然老,但"还能打"。
1.2 版本号与版本类型:看清你拿的到底是哪一份
SQL Server 2005 的内部版本号是 9.00 系列,但 9.00 后面那 4 位数字决定了它到底处于哪个服务包阶段。这个信息在你验证 SP4 是否安装成功时一定要用到,先记住这张表:
| 版本状态 | 内部版本号 | 说明 |
|---|---|---|
| RTM(初始版) | 9.00.1399 | 刚发布时的版本,未经任何服务包 |
| SP1 | 9.00.3042 | 第一个服务包 |
| SP2 | 9.00.3350 | 第二个服务包 |
| SP3 | 9.00.4035 | 第三个服务包 |
| SP4(最终包) | 9.00.5000 | 最后一个服务包,包含此前全部修补 |
版本类型上,SQL Server 2005 常见的版本有 Express(免费版)、Workgroup(工作组版)、Standard(标准版)、Enterprise(企业版)、Developer(开发版)。除了 Express 外,其他版本功能差异主要在性能和高级特性上,安装流程本身大差不差。需要特别提醒的是:下载安装包和 SP4 补丁时,一定要看清是 32 位还是 64 位、简体中文还是英文版本。位数不匹配会直接导致补丁装不上,语言不匹配也会提示"此语言版本不受支持"。这个坑我踩过一次,后面补丁章节会细说。
1.3 为什么SP4是绕不过去的坎
网上流传的所谓"SQL Server 2005 完整安装包",很多其实就是一张原始安装光盘的 ISO 镜像,里面并不包含 SP4。装完之后你打开 SQL Server Management Studio 一看,版本号还是 9.00.1399,原始得不能再原始。
不装 SP4 的后果,最直接的有三方面:
- 安全风险。SP4 是 SQL Server 2005 的最后一个服务包,修复了大量已知安全漏洞,尤其是 2010 年前后暴露的若干高危远程代码执行漏洞。裸奔的 RTM 版本放到生产环境,基本等于把数据库端口暴露给攻击者。
- 功能和兼容性问题。很多后来发布的驱动程序、管理工具、第三方监控软件,都要求 SQL Server 至少是 SP3 或 SP4。不装 SP4,你会发现某些备份软件连不上、某些动态视图查不到、某些性能计数器不存在。
- 后续维护无路可走。微软对 2005 的支持早就停止,唯一还能打的补丁就是 SP4。你不装它,后面出了问题连补的机会都没有。
所以我的建议是:只要决定装 SQL Server 2005,就必须把 SP4 作为整个安装流程的一部分,而不是可选项。
2. 装之前把三件事备齐:安装介质、SP4补丁、能兼容的系统
SQL Server 2005 安装失败,十次有八次是准备工作没做够。尤其是现在的主流操作系统上装这个老古董,兼容性问题是最大的拦路虎。这一节我把安装前需要准备和确认的东西全部列出来。
2.1 安装介质从哪来,怎么验收
微软官方下载中心现在已经不提供 SQL Server 2005 的在线下载了,正规渠道主要是:
- MSDN 订阅镜像:如果你公司或学校有 MSDN 订阅,登录订阅门户还能找到 SQL Server 2005 全系列镜像下载。
- 内部共享/老光碟:很多老工程师手里有当年项目留下的安装光盘或 ISO 文件,这是最常见的来源。
- 第三方存档网站:一些数据库技术社区有人整理并分享了 ISO,下载后务必校验哈希,避免文件被篡改或携带恶意内容。
拿到 ISO 之后,我建议先做三件事:
第一,看 ISO 文件大小。SQL Server 2005 企业版 32 位安装镜像一般在 1GB 以上,如果只有几百 MB,多半是精简版或不完整版。第二,用工具挂载或解压 ISO,确认里面有setup.exe、x86或x64目录、sqlservr.msi等关键文件。第三,在记事本打开autorun.inf或Setup目录,确认版本和语言信息。简单来说,安装包来源可以不那么"官方",但不能来路不明。
2.2 SP4补丁下载与校验
SP4 补丁的官方文件名是SQLServer2005SP4-KB2463332-x86-CHS.exe(32 位简体中文版),64 位则是SQLServer2005SP4-KB2463332-x64-CHS.exe。微软下载中心目前仍然保留着这个补丁的下载页面,但入口藏得比较深,直接搜索 KB2463332 一般能找到。
如果是英文系统,请下载ENU结尾的补丁包,不要和CHS(简体中文)混用。补丁包大小大概在 70~80MB 左右,下载速度可能不算快,耐心一点。
下载完成后,建议用哈希工具校验一下文件,尤其是从第三方渠道获取的补丁。具体哈希值以微软官方发布为准,我不会在这里贴死一个数字,因为不同语言、不同位数补丁的哈希都不同。校验通过后再拿去安装。
2.3 操作系统、硬件和前置组件检查清单
SQL Server 2005 官方支持的操作系统是 Windows Server 2003、Windows XP SP2+、Windows Vista。放到今天,你大概率不是用这些老系统装。以下是我实测过、能用的搭配方案:
| 操作系统 | 能否安装 | 注意事项 |
|---|---|---|
| Windows XP SP3 | 原生支持 | 最省心的环境,但虚拟机里要装好 VM Tools |
| Windows Server 2003 R2 | 原生支持 | 老企业服务器标配 |
| Windows 7 / Server 2008 R2 | 可以 | 需要右键 setup.exe 设置兼容模式,关闭 UAC |
| Windows 10 / 11 | 不建议 | 各种兼容问题太折磨,建议用虚拟机 |
| Windows Server 2012 R2 / 2016 | 可以但非官方 | 需要 .NET 3.5 功能开启,可能有性能计数器和注册表问题 |
硬件要求按现在的标准看低得可怜:CPU 只要 Pentium III 500MHz 以上,内存最低 512MB,推荐 1GB 以上,磁盘可用空间至少 2~3GB。但是要注意,SQL Server 2005 对多核 CPU 的调度和现代大内存的支持并不好,所以如果打算长期跑,建议使用虚拟机并限制 CPU 核数和内存。在 VMware 或 Hyper-V 里给虚拟机分配 2 核、2GB 内存,跑 2005 完全没问题,甚至更稳。
前置组件方面,最容易卡住的有三个:
- .NET Framework 2.0。SQL Server 2005 安装程序依赖它,但 Windows 7/Server 2008 R2 默认不启用 .NET 3.5(包含 2.0 和 3.0),安装时可能报"未安装 .NET Framework 2.0"。解决方法是打开控制面板 → 程序和功能 → 启用或关闭 Windows 功能,勾选 .NET Framework 3.5 再安装。
- Windows Installer 4.5。XP 或 Server 2003 上如果版本过低,需要先去装好。
- MSXML 6.0。SQL Server 2005 的安装引导程序用到了 MSXML 6,没有的话安装过程中会报错。旧版系统上建议提前装。
另外,如果你准备安装 Reporting Services 报表服务,需要 IIS 的支持。没有 IIS 也不至于装不上,安装程序会弹出一个黄色感叹号警告,这时候可以选择忽略继续。
2.4 用一条SQL确认你要处理的库是什么版本
如果你手上已经有一个正在运行的 SQL Server 2005 实例,或者一份别人给的备份文件,在动手之前,先确认一下目标版本是有必要的。直接在 SQL Server Management Studio 新建查询,执行:
SELECT @@VERSION;输出结果里如果包含Microsoft SQL Server 2005 - 9.00.5000.00,说明已经打了 SP4;如果是9.00.1399,就是 RTM 版本,需要补 SP4。
还可以用这句确认服务包级别和版本类型:
SELECT SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition');ProductLevel返回SP4就是已经打过 SP4,RTM就是原始版本。这个确认动作别省,尤其是接到项目里的 Step 1,省得后面白忙活。
3. 一步步装完SQL Server 2005:每个界面都值得看懂再点
准备工作做完,下面进入真正的安装环节。很多人装 SQL Server 2005 装到一半失败,或者装完不能用,往往是在某个界面随手点了个"下一步",没有理解选项含义造成的。这一节按安装向导的顺序,把每个关键界面都讲清楚。
3.1 运行setup.exe前必须做的三个动作
在双击setup.exe之前,有三件事必须做,尤其是你在 Windows 7 或 Server 2008 R2 上安装时:
- 右键 setup.exe → 属性 → 兼容性 → 勾选"以兼容模式运行这个程序" → 选择"Windows XP (Service Pack 3)"。这一步能避开大量因为 Windows 版本检查导致的安装中断。
- 勾选"以管理员身份运行此程序"。SQL Server 2005 的安装程序对权限很敏感,普通管理员双击和右键管理员运行,效果完全不同。
- 临时关闭 UAC(用户账户控制)或把 UAC 拉到最低。Windows 7/8/10/11 上不关闭 UAC,安装时很可能在某个环节弹 UAC 提示,而你不在电脑前,安装就会卡住或失败。
另外,杀毒软件和系统安全软件能退就退,或者把安装程序和它的解压目录加入白名单。这个老安装包的动作模式,容易被某些安全软件判定为风险行为,导致关键文件被拦截。
3.2 安装向导关键界面逐项说明
组件选择界面
进入安装向导后,会先检查系统必备组件,通过后进入"要安装的组件"界面。这里有四个核心组件,按你的需求勾选:
| 组件 | 作用 | 是否建议安装 |
|---|---|---|
| SQL Server Database Services | 数据库引擎,核心中的核心 | 必选 |
| Analysis Services | 多维分析、数据挖掘 | 一般不用 |
| Reporting Services | 报表服务 | 按需选,依赖IIS |
| Notification Services | 通知服务 | 一般不用 |
| Integration Services | 数据集成、ETL | 推荐选 |
如果你只是需要还原一个业务库、跑一下查询,选SQL Server Database Services和Integration Services就够了。别贪多,组件越多装得越慢,后续出问题的面也越大。
实例配置界面
到达"实例名"界面时,需要选择默认实例还是命名实例。这个选择直接关系到你以后怎么连接数据库:
- 默认实例:实例名为 MSSQLSERVER,连接时用服务器名或
(local)就能访问,端口默认 1433。 - 命名实例:实例名自拟,比如
SQL2005,连接时要用服务器名\实例名的格式,端口默认是动态分配。
单台机器上只能有一个默认实例,但可以同时存在多个命名实例。如果你这台机器上还会跑其他版本的 SQL Server,或者未来可能要装 2008/2012 做迁移演练,我建议这里用命名实例,避免实例名冲突。
服务账户界面
服务账户界面很多人看一眼就跳过了,实际上这里有个很容易忽略的细节。SQL Server 2005 有多个服务:SQL Server 主服务、SQL Server Agent、Analysis Services、Reporting Services、Integration Services。安装向导默认每个服务用同一个账户,你也可以点开"自定义每个服务的账户"分开设置。
生产环境通常遵循公司 AD 域策略,但做本地测试环境的话,直接用内置账户即可。这里我的建议是:SQL Server和SQL Server Agent都使用Local System或Network Service,并在下方勾选"启动 SQL Server 服务时自动启动"。
注意:如果这台机器上了域,并且你计划用 SQL Server Agent 做跨服务器作业、备份到网络共享,那就要用专门的域账户,否则后面很容易遇到权限不足的问题。本地单机测试就先不用管这些。
身份验证模式界面
身份验证模式是我个人觉得整个安装过程中最应该停下来想一想的界面。SQL Server 2005 提供两种模式:
- Windows 身份验证模式:只能用 Windows 系统账户登录,安全性好,但以后如果要用
sa账户或从 Linux、Java 程序等非 Windows 环境连接,会比较麻烦。 - 混合模式:既支持 Windows 身份验证,也支持 SQL Server 身份验证(账号密码由 SQL Server 自己管理)。
我的判断标准很简单:如果你 100% 确定只有本机的 Windows 应用会连这个库,选 Windows 身份验证就够了;但只要有一点可能要用sa连接、以后要迁移数据、或者程序里写的是 SQL Server 账号密码连接串,就直接选混合模式。选了混合模式后,安装程序会要求你设置sa的密码,请设置一个复杂密码并记好。2005 的密码策略默认要求强密码,太简单会过不去。
排序规则界面
在"排序规则设置"界面,简体中文版的默认值是Chinese_PRC_CI_AS。这个默认值对中文环境是正确的,不需要改。简单解释一下:CI表示不区分大小写,AS表示区分重音。除非你的业务系统有明确的排序规则要求,否则这里保持默认即可。
错误报告和使用情况报告界面
安装过程中最后会出现两个关于错误报告的勾选项,默认是勾上的。这两个选项会把错误信息或使用数据发送给微软。建议全部取消勾选,原因不言自明:你的数据库环境信息没必要往外传,而且这些设置装了之后改起来还要动注册表,不如从一开始就关掉。
3.3 默认实例、命名实例与端口,选错后面麻烦
实例和端口的逻辑,是新手最容易混的地方。我在项目中遇到过不止一次:开发配置连接串时写了127.0.0.1连不上,或者 SQL Server Browser 服务没开,命名实例无法自动解析端口。
这里帮你把关系理顺:
- 一台机器上可以有多个 SQL Server 实例,它们共用同一套基础服务,但各自有独立的数据库、日志、服务账户。
- 默认实例监听在固定的 1433 端口,客户端连
localhost或127.0.0.1就能找到。 - 命名实例默认不在 1433 监听,而是在启动时动态获取一个空闲端口。客户端要通过
SQL Server Browser服务去发现它。如果 SQL Server Browser 被禁用,客户端就必须手动指定端口号,否则连接失败。
所以,如果你装的是命名实例,安装完成后记得把 SQL Server Browser 服务设为自动启动。不然过一阵子重启机器,你会发现程序连不上数据库了。
3.4 装完先别急打补丁:第一时间的状态检查
SQL Server 2005 安装向导走完,"完成"界面出现后,先别急着关机,也别急着直接打 SP4。先做两分钟的检查:
- 打开 Windows 服务管理器,确认名为
SQL Server (MSSQLSERVER)或SQL Server (你的实例名)的服务状态是"正在运行"。 - 打开
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\Ssms.exe或者通过开始菜单打开 SQL Server Management Studio,尝试连接实例。 - 如果连接报错,先看服务是否启动,再看协议是否启用(SQL Server 配置管理器 → 客户端协议 → 启用 TCP/IP 和 Named Pipes)。
确认能正常连接后,再继续下一步打补丁。这一步的意义在于:如果连原始版本都起不来,补丁打了也白打,先把基础问题解决。
4. SP4补丁:安装顺序中最容易被忽略却最致命的一环
SQL Server 2005 的 SP4 补丁,是整个安装流程里最折腾人的一步,也是网上教程最不爱讲的一步。很多人的"完整安装包"装完,查询版本号还是 9.00.1399,原因就在这:安装光盘本身只是 RTM,需要单独打 SP4。
4.1 SP4到底是什么,解决了什么问题
SP4,全称 Service Pack 4,是微软为 SQL Server 2005 发布的最后一个累积服务包,版本号 9.00.5000。它包含此前 SP1、SP2、SP3 的全部修复内容,外加若干安全更新和稳定性修复。对 2005 这个版本来说,SP4 就是"毕业版",之后没有任何官方补丁了。
它解决的具体问题包括:
- 一堆已公开的安全漏洞,尤其是数据库引擎、Analysis Services、Reporting Services 组件的高危漏洞;
- 在一些新操作系统上运行时出现的兼容性问题,比如在 Windows 7 和 Server 2008 R2 上某些查询突然变慢或报错;
- 64 位系统上特定场景下的内存和性能问题;
- 数据库镜像、复制、全文索引等功能的若干 bug。
从实际使用的角度说,打不打 SP4,体验是完全不同的两套 SQL Server 2005。打上 SP4 之后,再配上一部分微软不更新但有价值的功能修复,这个老库才算进入一个可稳定维护的状态。
4.2 打补丁前二十分钟的准备动作
我见过不少人不做任何准备,双击 SP4 补丁就开始装,结果装到一半显示"某个组件正在使用"或者"服务无法停止"。
打补丁之前,按这个顺序做准备工作:
- 备份 master 数据库。SP4 安装过程中会升级数据库引擎的系统库,如果中途失败导致 master 损坏,没有备份会非常被动。备份命令也很简单:
BACKUP DATABASE master TO DISK = 'D:\backup\master_before_sp4.bak';- 断开所有客户端连接。通知一下可能连在这个库上的人,或者在服务管理器里先把 SQL Server Agent 停止,避免数据库引擎被占用。
- 关闭 SSMS 和所有管理工具。SSMS 进程会占用 SQL Server 的某些 DLL,不关掉可能导致补丁升级文件失败。
- 确认补丁包位置。把补丁文件放到本地磁盘(比如
D:\),不要放在网络路径上。XP 系统如果放在共享盘安装,容易出现权限问题。 - 检查磁盘空间。SP4 补丁解压和安装过程大概需要 1.5~2 倍于补丁包的空间,预留 2GB 以上比较稳妥。
4.3 SP4安装的完整过程和耗时判断
双击补丁包,会出现一个解压界面,它会把安装文件解压到C:\Windows\Temp\或提示你选择目录,然后自动启动安装向导。整个流程大概是:
- 解压安装文件:这一步看起来像卡住了,其实在释放文件。有的机器会在这里停留 5~10 分钟,尤其是老硬盘。不要因为界面长时间不动就直接结束进程。
- 许可协议:点下一步接受。
- 选择实例:如果是多实例机器,会列出所有 SQL Server 实例,勾选需要升级的实例。
- 检查依赖组件:安装程序会自动检查 .NET Framework、Windows Installer 版本。
- 复制并升级文件:进度条走完后,会提示"安装完成"。
整个安装过程,在配置正常的虚拟机里大概需要 20~40 分钟,主要耗时在文件复制和数据库升级阶段。如果进度条卡在 80% 左右超过 30 分钟,别急,这可能是数据库升级脚本执行的阶段,遇到大库或慢盘,确实会有这个情况。
SP4 安装完成后,SQL Server 服务通常会尝试自动重启。如果没有自动重启,手动把服务管理器中相关服务重新启动一次。
4.4 打补丁最容易翻车的三个现场
第一个现场:装了 32 位补丁到 64 位 SQL Server 上。这种情况安装程序一般会直接拒绝,提示"该补丁与此 SQL Server 版本不兼容",但有时候不会明确说"位数不对",只是报一个 "Error code 0x85640002" 或者 "Setup failed"。排查的方法是先确认 SQL Server 位数。在 SSMS 里执行:
SELECT SERVERPROPERTY('Edition');输出中如果包含64-bit,就去下 x64 补丁。
第二个现场:SQL Server 服务还在运行,补丁安装程序卡在停止服务那一步。安装程序在升级文件之前需要停止几乎所有 SQL Server 相关服务。如果有个别服务因为权限或依赖问题停不掉,就会一直卡住。解决方法是打开服务管理器,手动停止SQL Server (实例名)、SQL Server Agent (实例名)、SQL Server Integration Services等服务,再重新点补丁的"重试"。
第三个现场:补丁装一半,突然断电或重启。这会导致数据库引擎文件版本不一致,最坏的情况是 master 数据库损坏,SQL Server 服务起不来。如果你遇到了这种情况,先别慌,把之前备份的 master 数据库还原回去,然后重新打 SP4。这就体现出 4.2 节备份的重要性了。
4.5 如何验证SP4已经打上:版本号才是硬道理
补丁装完,验证工作是最重要的。不要看安装向导提示"成功",要以实际查询结果为准。
在 SSMS 中执行:
SELECT @@VERSION;输出里应该看到:
Microsoft SQL Server 2005 - 9.00.5000.00 (Intel X86) ... (C) 1988-2005 Microsoft Corporation. Enterprise Edition on Windows NT ...注意9.00.5000.00是 SP4 的标志版本号,如果是别的数字,说明补丁没打上,得重新来。
再执行一句:
SELECT SERVERPROPERTY('ProductLevel');返回SP4即成功。顺带把SERVERPROPERTY('Edition')也查一下,确认版本类型和生产一致。
5. 安装失败排查:五个最常见的坑和定位思路
SQL Server 2005 安装失败不像新版 SQL Server 那样报错直观,很多错误都是"中途退出"或者"回滚",让人摸不着头脑。这一节我把遇到的、听说的、帮别人处理的常见问题集中说一下,给出定位路径和解决思路。
5.1 性能计数器损坏导致中途退出
现象:安装程序在"系统配置检查"阶段或刚开始复制文件时,弹出类似 "Performance counter registry hive consistency check failed" 的错误,然后安装中止。
原因:Windows 操作系统的性能计数器注册表项不一致,或者 SQL Server 的计数器注册信息与系统不匹配。这在新版本的 Windows 上装老 SQL Server 时尤其常见。
定位思路:先确认系统性能计数器是否正常。打开性能监视器(perfmon),如果能正常显示 CPU/内存曲线,说明系统层面的性能计数器基本没问题;如果不能,就可以判断是注册表性能计数器的问题。
处理办法:在命令行以管理员身份执行:
lodctr /r这个命令会重建系统性能计数器。执行完重启系统,再尝试安装 SQL Server。
如果lodctr /r不够,可以到C:\Windows\System32\winsock或注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib下检查是否有异常项。但这个操作比较复杂,一般情况下lodctr /r就能解决八成问题。
5.2 .NET Framework 2.0 检查不通过
现象:安装向导进入"系统必备组件检查"环节,提示需要 .NET Framework 2.0,点击安装后却报错或一直卡住。
原因:Windows 7/Server 2008 R2 虽然自带了 .NET 3.5.1(包含 2.0 和 3.0),但在"功能"里默认是关闭的,SQL Server 2005 的检测逻辑找不到对应的注册表项,就认为没装。
处理办法:不要用 SQL Server 2005 安装包自带的 .NET 组件,直接通过 Windows 系统功能开启 .NET Framework 3.5.1:
- Windows 7 / Server 2008 R2:控制面板 → 程序和功能 → 启用或关闭 Windows 功能 → 勾选 .NET Framework 3.5.1。
- 如果系统是精简版,需要离线安装包,可以从系统安装介质或可靠的离线源安装。装完之后再跑 SQL Server 2005 setup.exe。
5.3 安装到一半回滚:日志怎么看
现象:安装进度条走了 60% 或 80%,然后突然"回滚",界面提示安装失败。
原因:回滚是 MSI 安装机制在检测到某个步骤失败时的兜底行为,真正的原因被吞掉了,需要看安装日志。
定位思路:SQL Server 2005 安装日志存放在C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\Log\目录下。重点看这几个文件:
Summary.txt:安装概要,记录了整个安装过程的状态和最终失败点。Files\SQLSetup0001_XXX_YYYY.log:具体安装日志,按时间戳排列,找最后一个 Error 或 Fatal error。
打开日志文件后,搜索关键字failed、error code、0x。常见错误代码和原因我会在下一小节说明。如果不嫌麻烦,还可以通过命令行捕获更完整的日志:
setup.exe /qb /lv C:\sql2005_install.log这条命令用基本界面安装,并把详细日志写到指定文件,信息量比向导界面大得多。
处理办法:多数情况下,回滚的原因是磁盘空间不足、权限不够、杀毒软件实时扫描干扰、依赖组件缺失。把这几项逐一排除后,清空C:\Windows\Temp和安装日志目录,重新运行安装程序。
5.4 Windows Installer 报错 0x643
现象:安装过程中弹出 "Error code 0x643"。
原因:0x643 对应 Windows Installer 的通用升级失败错误,一般和 Windows Installer 本身损坏、缓存目录权限异常或旧版本残留有关。
定位思路:先检查 Windows Installer 服务是否启动(services.msc→ Windows Installer),再尝试重注册:
msiexec /unregister msiexec /regserver之后清理两个目录:C:\Windows\Temp和C:\Windows\Installer下的项目(后者是隐藏目录,操作时小心,不要乱删其中的文件,只是确认是否有权限异常)。
如果还不行,尝试用系统的"程序和功能"卸载掉残留的 SQL Server 2005 组件(如果有),然后用 Windows Installer 清理工具清理后再装。这里的核心思路要知道:0x643 不是 SQL Server 的问题,是操作系统 MSI 引擎的问题,要把矛头指向 Windows Installer。
5.5 权限不够与杀毒软件干扰
现象:安装到某个节点,界面突然报"无法写入注册表"或"无法创建目录"。
原因:当前用户虽然看似是管理员,但因为 UAC 的存在,实际权限是受限的。
处理办法:把setup.exe右键 → 以管理员身份运行,或在管理员权限的命令行下执行。另外,安装介质所在的目录、解压出来的临时目录都要有足够的读写权限。如果放在C:\Users\公共这样的特殊目录下,权限也可能出问题。最好的做法是放到C:\或D:\根目录下新建的简单路径,比如D:\sql2005,路径中不要有中文。
杀毒软件干扰的解决方式前面也提过:临时关闭实时防护或把安装目录加入白名单。SQL Server 2005 安装过程中会注册服务、修改注册表、替换系统 DLL,这些动作在安全软件眼里都"很可疑"。被误拦的典型表现是:安装过程没有明显报错,但装完发现某些服务缺失或文件被删除。这种问题最难排查,所以提前关防护是最优解。
6. 装完不是结束:连接、附加旧库,以及未来迁移的路线
SQL Server 2005 装好、SP4 打上,这才算真正开始用。这一节讲装完之后马上要做的事,以及这个老库未来怎么跟新版本共存和迁移。
6.1 首次连库和远程访问配置
用 SSMS 连接时,服务器名一栏填localhost就可以连到本机默认实例。如果用的是命名实例,需要填localhost\实例名。首次连接验证一下身份验证模式是否和安装时选择的一致。
如果你以后要通过局域网远程访问这个 SQL Server 2005,还需要做三件事:
- 在 SQL Server 配置管理器中启用 TCP/IP 协议。
- 在 Windows 防火墙中放行 1433 端口(默认实例)。如果是命名实例,还需要放行 UDP 1434 端口给 SQL Server Browser 服务,或者手动为命名实例指定固定端口。
- 确认 SQL Server Browser 服务已启动并设为自动启动。
这里我特别提醒一下:SQL Server 2005 安装在 Windows 7 或更高版本系统上,防火墙第一次弹窗时很多人直接点"允许",但只放行了当前运行的几个进程,SQL Server 的另一个监听进程未必被放行。建议直接到防火墙高级设置里,按端口放行,不要只按程序放行。
6.2 附加/还原旧数据库的两种方式
拿到一份旧库的 .bak 文件后,还原是首选方式:
RESTORE DATABASE [OldDB] FROM DISK = N'D:\backup\OldDB.bak' WITH REPLACE, MOVE N'OldDB' TO N'D:\data\OldDB.mdf', MOVE N'OldDB_log' TO N'D:\data\OldDB_log.ldf';如果报错提示"数据库正在使用",加WITH REPLACE依然不行,就先执行ALTER DATABASE [OldDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;再还原。
如果你的介质是一份 .mdf 和 .ldf 文件,没有 .bak,可以用附加的方式:
sp_attach_db 'OldDB', 'D:\data\OldDB.mdf', 'D:\data\OldDB_log.ldf';或者用 SSMS 图形界面的"附加"功能。注意:2005 只能附加 2000 和 2005 版本的数据库文件,更高版本的数据文件无法附加到 2005。
6.3 从2005向新版本迁移时要注意的事
SQL Server 2005 备份还原到更高版本(2008、2012、2016 等)是兼容的,还原之后数据库会自动完成升级。但有几个坑必须提前排:
- 还原到高版本后,数据库兼容级别默认会变成目标版本的默认级别,某些在 2005 上能用的语法和查询计划可能发生变化。先用
ALTER DATABASE [库名] SET COMPATIBILITY_LEVEL = 90;让它暂时保持 2005 的兼容级别,等业务验证没问题后再逐步调高。 - 涉及复制、镜像、Service Broker 的库,迁移前需要先禁用这些功能,否则还原后可能处于异常状态。
- 老版本的
DTS包(2005 中的 Integration Services 包)迁移到新环境,需要在新版本上重新部署和配置,不能直接还原一个包文件就能用。
另一种思路是使用高版本的导入导出向导,把 2005 作为数据源,直接同步到新版数据库。数据量不大时这种方式直观,但会丢失索引、约束、触发器、存储过程等结构对象,只适合纯数据迁移。
6.4 在虚拟机里跑2005的几条实测建议
目前推荐的做法是在虚拟机中安装 SQL Server 2005,既不影响宿主机环境,也能随时快照回滚。结合这几年的实际经验,提几个建议:
- 分配 2GB 内存给虚拟机就够了,2005 对超大内存的管理能力一般,内存给多了反而可能出现诡异的性能问题。
- 装完系统后先打齐系统补丁,再装 SQL Server,再打 SP4,然后清理系统并做一次快照。这个快照就是你的"干净环境备份",以后任何测试都可以直接回滚到这个状态。
- 虚拟机磁盘不要用动态扩容的薄磁盘,用一个固定大小的 VHDX/VMDK,SQL Server 的随机读写性能会稳定很多。
- 和宿主机之间用共享文件夹或 NAT 网络共享备份文件,不要把备份文件长期放在虚拟机 C 盘,以免空间耗尽导致库挂掉。
- 如果虚拟机里跑的是 XP/2003 系统,记得装完系统后把 VM Tools 或 Integration Services 组件装上,否则网络性能和磁盘性能都会很差。
最后再分享一点个人的真实体会。我帮客户恢复过一个十几年前的老 MES 数据库,客户给的是一个.bak文件,还是从磁带机上翻出来的。我在自己电脑的虚拟机里装 SQL Server 2005,前后折腾了大半天,最后发现最花时间的不是安装本身,而是在网上下载"完整安装包"时找补丁的那段路程。装完之后我顺手查了一下@@VERSION,结果发现网上那个所谓的"完整安装包"装出来居然是原始 RTM 版本,后来重下 SP4 补丁才真正搞定。从那以后,我的习惯就是:任何老版本数据库环境的搭建,装完基础包后的第一件事永远是打满 Service Pack,确认版本号,再做快照,之后再碰数据。希望这篇文章能帮你省下那段弯路,一套装下来直接稳定干活。