SQL Server 2008 R2 安装避坑指南:环境准备、实例配置与故障排查
简介:SQL Server 2008 R2 企业级数据库管理系统的安装部署资源包,面向数据库管理员、后端开发与运维人员,用于搭建本地测试环境或复现旧版业务系统。压缩包共 111 个文件,约 41.46MB,以 dll 动态链接库、rll 资源库、exe 安装与工具程序为主,辅以 mdf/ldf 数据库文件、ini 配置、xml 清单及证书文件,基本覆盖安装部署所需的组件与配置项。资源围绕该版本在数据存储、查询处理、安全性、可用性与商业智能方面的增强特性组织,读者可据此完成实例安装、服务账户与组件选择等自定义配置,并借助 Management Studio 与配置管理器开展开发、维护和监控。已有 2067 人学习下载,适合需要快速获取可运行环境、对照旧版特性做兼容验证或教学演示的技术人员参考使用。
1. 装 SQL Server 2008 R2 之前,先把这台机器的底子摸清
上周帮一个做设备数据采集的朋友收拾一台老工控机,系统是 Windows 7 SP1,业务软件只认 SQL Server 2008 R2,装到一半报了个“性能计数器注册表项不一致”,重启三次都没过去。这类场景其实很常见:老产线、老 ERP、老报表系统,数据库版本被业务锁死在 2008 R2,新版本装上去反而连不上。SQL Server 2008 R2 的安装难点不在“下一步”点得快不快,而在装之前的系统补丁、.NET 版本、实例命名和排序规则有没有对齐。这篇笔记按我实际装机的顺序写:先列环境、再走安装、然后配实例和远程、最后讲怎么验证和救火。适合第一次装 2008 R2 的新手,也适合被老系统绑住、需要反复重装的老手。
2. 环境准备:版本、补丁和依赖一个都不能少
2.1 先确认装哪个版本、要哪些系统补丁
SQL Server 2008 R2 的版本分支不算多,但选错会直接影响后面能不能用。常见的有 Express(免费、10GB 单库上限)、Standard、Enterprise、Datacenter。老业务系统一般用 Standard 就够,Express 适合单机小工具,但要注意它没有 SQL Server Agent,定时任务得靠 Windows 计划任务补。
| 版本 | 典型用途 | 单库上限 | 是否带 Agent |
|---|---|---|---|
| Express | 单机小工具、Demo | 10GB | 否 |
| Standard | 中小业务、报表 | 无硬上限 | 是 |
| Enterprise | 大数据量、分区 | 无硬上限 | 是 |
系统侧我一般先核对三件事:操作系统是不是 Windows 7 SP1 / Windows Server 2008 R2 SP1 及以上;有没有装 .NET Framework 3.5 SP1(2008 R2 安装程序强依赖它);有没有装 Windows Installer 4.5 以上。缺 .NET 3.5 的机器,安装程序会在“安装程序支持规则”那一步直接卡住,报“需要 .NET Framework 3.5 SP1”。
补丁方面,2008 R2 原版安装介质在较新的系统上容易遇到“性能计数器”和“WMI”相关的检查失败,常见做法是先打上 SP1 或 SP2 累积更新再装,或者装完立刻补。我一般会先把系统补丁打到当前能打的最新,再开始装数据库,省得装到一半被系统更新打断。
# 以管理员身份打开 CMD,先确认 .NET 3.5 是否启用 dism /online /get-featureinfo /featurename:NetFx3 # 如果状态是 Disabled,启用它(需要系统安装介质或联网) dism /online /enable-feature /featurename:NetFx3 /all第一行是查询 .NET 3.5 功能状态,/online表示对当前运行的系统操作,/featurename:NetFx3指定功能名。第二行是启用,/all会连带启用父功能。如果机器离线,/Source参数要指向系统安装盘的sources\sxs目录,否则会报找不到源文件。这一步没做通,后面安装程序的支持规则检查一定过不去。
2.2 账户、路径和实例名的取舍
安装账户建议用本地管理员,不要用域账户临时提权,老机器上域策略经常把安装目录权限改乱。安装路径我习惯把程序和数据分开:程序放C:\Program Files\Microsoft SQL Server,数据放D:\SQLData,日志放D:\SQLLog。这样以后备份、迁移、扩容都清楚,不会出现“数据到底在哪个盘”的翻车。
实例名分默认实例和命名实例。默认实例就是机器名,端口 1433;命名实例形如机器名\SQLEXPRESS,走动态端口。老业务软件如果连接串写死了localhost或127.0.0.1,就装默认实例;如果允许多套数据库共存,用命名实例更稳。我一般会先问清楚业务连接串长什么样,再决定实例名,这一步问错,后面改连接串比重装还麻烦。
排序规则(Collation)也是容易被忽略的点。中文环境常用Chinese_PRC_CI_AS,如果业务库是从别的机器备份还原过来的,排序规则不一致会在跨库查询时报“无法解决 equal to 操作的排序规则冲突”。安装时选一个和现有库一致的排序规则,能省掉后面很多事。
提示:安装前把机器名、实例名、端口、排序规则四项写在一张纸上,装完对照检查,比装完再猜要快得多。
3. 安装过程:从介质到实例的完整走法
3.1 挂载介质与安装程序支持规则
把安装介质挂载或解压后,右键setup.exe以管理员身份运行。第一屏是“安装程序支持规则”,它会检查操作系统版本、.NET、Windows Installer、性能计数器等。这里出现的警告分两类:带“警告”的可以继续,带“失败”的必须先处理。性能计数器那条如果失败,常见做法是重建计数器:
# 重建性能计数器,修复“性能计数器注册表项不一致” lodctr /R # 如果上面报错,先备份再重建 cd C:\Windows\System32 lodctr /Rlodctr /R会从注册表和系统文件重新构建性能计数器,执行完再点“重新运行”让安装程序复检。这个操作对系统没有破坏性,但会重置自定义计数器,老机器上一般没有自定义项,可以放心跑。如果重建后仍失败,检查C:\Windows\System32\PerfStringBackup.INI是否存在,缺失时从同版本系统拷一份过来。
3.2 功能选择与实例配置
功能选择页按需勾选:数据库引擎服务、SQL Server 复制、客户端工具(管理工具基本)、客户端工具 SDK。老业务如果只做本地读写,复制可以不选;如果要做报表订阅,复制和 Agent 都要选上。Business Intelligence 那组在 2008 R2 里依赖较重,没有报表需求就别勾,省得装完多一堆服务。
实例配置页选“默认实例”或“命名实例”。命名实例的实例 ID 会自动带出来,建议保持默认,不要改成中文或带空格的名字。服务账户我一般用NT AUTHORITY\NETWORK SERVICE或专用低权限账户,不要用 Local System,权限过大且审计困难。排序规则在这一页的“排序规则”标签里改,选Chinese_PRC_CI_AS。
-- 装完后核对实例和排序规则 SELECT SERVERPROPERTY('InstanceName') AS InstanceName, SERVERPROPERTY('Collation') AS Collation, SERVERPROPERTY('ProductVersion') AS ProductVersion, SERVERPROPERTY('Edition') AS Edition;这段查询在 SSMS 里执行,InstanceName为空表示默认实例,Collation应显示Chinese_PRC_CI_AS,ProductVersion在 2008 R2 上一般是10.50.x。如果排序规则不对,装完再改要重建系统库,代价很大,所以安装页那一步别急着点下一步。
3.3 数据库引擎配置与混合认证
数据库引擎配置页要设“身份验证模式”。只在内网单机用,Windows 身份验证就够;如果业务程序用账号密码连,选“混合模式”,并设一个强密码的sa。我一般会额外建一个业务专用登录名,不给sa,权限按库授予,避免程序里到处是sa。
-- 装完后建业务登录名并授权(示例库名按实际替换) CREATE LOGIN app_user WITH PASSWORD = '换成强密码', CHECK_POLICY = ON; USE YourDbName; CREATE USER app_user FOR LOGIN app_user; ALTER ROLE db_datareader ADD MEMBER app_user; ALTER ROLE db_datawriter ADD MEMBER app_user;CHECK_POLICY = ON会套用系统的密码策略,老机器上如果策略很严,密码要够复杂。db_datareader和db_datawriter只给读写权限,不给 DDL,业务程序一般够用。需要执行存储过程的,再单独授EXECUTE。这一步做完,后面应用连接串里就不用出现sa了。
3.4 安装后立即打的补丁和端口设置
安装完成后,安装程序会提示重启。重启后先确认服务起来:SQL Server(实例名)、SQL Server Agent、SQL Server Browser(命名实例需要)。然后打 SP2 或对应的累积更新,2008 R2 的 SP2 版本号是10.50.4000起步,打完后ProductVersion会变。补丁不打,后面连远程或跑某些查询可能遇到已知问题。
端口方面,默认实例默认 1433,命名实例走动态端口。要让远程稳定连,常见做法是给命名实例在“SQL Server 配置管理器”里固定一个 TCP 端口,然后在防火墙放行。固定端口比依赖 Browser 服务更可控,Browser 服务在老机器上经常被安全软件拦。
# 防火墙放行 1433(默认实例),命名实例换成你固定的端口 netsh advfirewall firewall add rule name="SQLServer2008R2-1433" dir=in action=allow protocol=TCP localport=1433dir=in是入站,action=allow放行,localport指定端口。命名实例固定端口后,连接串要写成机器名,端口或IP,端口,不能只写实例名。这一步没做,远程连不上时先查防火墙,再查配置管理器里的 TCP/IP 是否启用。
4. 避坑与排查:五条装 2008 R2 时真会遇到的坑
4.1 性能计数器检查失败,安装卡在支持规则
现象:安装程序支持规则页报“性能计数器注册表项不一致”,点重新运行仍失败。原因:系统性能计数器注册表损坏,常见于克隆系统或装过其他数据库的机器。解决:管理员 CMD 执行lodctr /R重建,仍不行就检查PerfStringBackup.INI,从同版本系统拷贝后重启再试。我遇到过一台机器重建两次才过,第三次重启后规则检查才变绿。
4.2 命名实例远程连不上,报“找不到实例”
现象:本机 SSMS 能连机器名\实例名,远程连不上。原因:命名实例走动态端口,SQL Server Browser 服务没起或被防火墙拦。解决:配置管理器里给实例固定 TCP 端口,防火墙放行该端口,连接串改成IP,端口。固定端口后就不依赖 Browser 了,稳定性明显好一截。
4.3 排序规则冲突,跨库查询报 equal to 操作错误
现象:从别的机器还原的库和本地库联查,报“无法解决 equal to 操作的排序规则冲突”。原因:两个库排序规则不一致。解决:安装时统一选Chinese_PRC_CI_AS;已经装错的,查询里对冲突列加COLLATE,或重建库。重建库是下策,能安装时对齐就别拖到后面。
4.4 安装中途失败,残留实例导致重装报“已存在实例”
现象:第一次装到一半失败,再装提示实例已存在或注册表项冲突。原因:卸载不干净,注册表和安装缓存有残留。解决:控制面板卸载所有 SQL Server 相关组件,删C:\Program Files\Microsoft SQL Server和C:\Program Files (x86)\Microsoft SQL Server残留目录,清理注册表HKLM\SOFTWARE\Microsoft\Microsoft SQL Server下对应实例键,重启后再装。动注册表前先导出备份,这是后悔药。
4.5 内存和最大并行度没设,老机器跑起来像卡死
现象:装完能连,但一跑大查询机器就卡,CPU 打满。原因:2008 R2 默认会吃较多内存,最大并行度默认 0(自动),老机器核少时容易并行过头。解决:实例属性里设“最大服务器内存”留 2~4GB 给系统,最大并行度设成 4 或更低。这两项在“服务器属性 → 内存/高级”里改,改完不用重启。
-- 限制最大内存和并行度(按机器实际内存调整) EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'max server memory (MB)', 4096; EXEC sp_configure 'max degree of parallelism', 4; RECONFIGURE;max server memory单位是 MB,4GB 只是示例,8GB 内存的机器留 2GB 给系统比较稳。max degree of parallelism设 4 表示单查询最多 4 个并行线程,核多的机器可以适当调高,老双核机器设 2 更合适。改完用RECONFIGURE生效,不需要重启实例。
5. 装完怎么验证:三条查询加一次远程连接
装完不验证,等于没装。我一般按“本机查询 → 远程连接 → 业务连接串”三步走。第一步在 SSMS 里跑版本和配置查询,确认实例名、排序规则、版本号、内存设置都对得上。第二步从另一台机器用IP,端口连,验证防火墙和端口固定是否生效。第三步拿业务程序的实际连接串跑一次读写,这一步最能暴露权限和排序规则问题。
-- 验证 1:版本、实例、排序规则 SELECT SERVERPROPERTY('ProductVersion') AS Ver, SERVERPROPERTY('Edition') AS Edition, SERVERPROPERTY('Collation') AS Collation; -- 验证 2:内存和并行度是否生效 SELECT name, value_in_use FROM sys.configurations WHERE name IN ('max server memory (MB)', 'max degree of parallelism'); -- 验证 3:建测试表跑一次读写,确认权限和排序规则 CREATE TABLE dbo.install_check (id INT PRIMARY KEY, note NVARCHAR(50)); INSERT INTO dbo.install_check VALUES (1, N'安装验证'); SELECT * FROM dbo.install_check WHERE note = N'安装验证'; DROP TABLE dbo.install_check;第一段查版本和排序规则,ProductVersion以10.50开头说明是 2008 R2,排序规则应为Chinese_PRC_CI_AS。第二段查value_in_use,注意不是value,value_in_use才是当前生效值。第三段建表、插入中文、按中文条件查,能同时验证权限和排序规则,查得到说明这条链路是通的。跑完记得删测试表,别留在业务库里。
远程连接验证时,如果连不上,按“服务是否启动 → TCP/IP 是否启用 → 端口是否固定 → 防火墙是否放行”顺序查,别一上来就重装。业务连接串验证时,重点看程序用的账号有没有对应库的读写权限,以及连接串里的实例写法是机器名还是机器名,端口。
从那以后我每次装 2008 R2,都会在装完当天把这三条查询和一次远程连接走一遍,确认无误再交给业务方。老系统的环境一旦装歪,后面排查的成本远高于装的时候多花那二十分钟。希望帮到你。
本文还有配套的精品资源,点击获取