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

文章详情

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

Windows 10 安装 SQL Server 2008 完整指南与兼容性排查

Windows 10 安装 SQL Server 2008 完整指南与兼容性排查 Windows 10 装 SQL Server 2008这个需求看着有点复古但真等你遇到公司老业务系统迁移到新电脑时就明白了。windows10 下安装 SqlServer2008 的痛点一直不是“不会下一步下一步”而是安装程序卡死、兼容性检查不通过、装好了服务起不来。这篇文章把整个流程拆开图文级一步步说明从版本选型、系统准备、安装步骤到常见问题排查全部交代清楚。适合需要在本机跑老应用的开发者、接手历史项目的维护人员以及课程实验环境还在用 2008 的同学参考。1. 版本先搞清楚装 2008 还是 2008 R21.1 一个名字引起的混乱标题写的是 SQLServer2008但很多人手里其实拿的是 2008 R2。这两个东西界面相似实际隔了一代SQL Server 2008 版本号 10.0.x2008 R2 版本号 10.50.x。数据库引擎版本不同、服务目录名不同、补丁包不能通用装错补丁会出现各种奇怪现象。在 Windows 10 上我的建议很明确如果手里是 SQL Server 2008 R2 镜像优先找带 SP3 或 SP4 的整合版。裸的 RTM 版在 Win10 上安装大概率报错因为安装器里的系统版本列表根本没有 Windows 10。如果只有 SQL Server 2008 RTM必须先准备 SP4。RTM 检测到系统版本号过高直接拒绝执行不是右键兼容性能一直绕过去的。另外一个容易被忽略的问题你装的是企业版、标准版、开发版还是 Express。Express 版免费但功能受限数据库最大 10GB开发版免费但是只能用于开发和测试功能上和企业版一致。如果做开发和自学选开发版最舒服。公司生产环境必须用合法授权的标准版及以上版本的 Key别拿试用版糊弄。1.2 为什么 Win10 上会这么折腾SQL Server 2008 出生的时候 Windows 10 还不存在安装器内部维护了一个“支持的操作系统版本”列表没有 Win10于是安装前的“操作系统兼容性”检查直接不通过。装了新版补丁之后这个列表才更新到 Windows 10所以补丁版本才是关键。还有一个隐藏点Win10 默认没有启用“.NET Framework 3.5”。SQL Server 2008 的数据库引擎和管理工具依赖 .NET 3.5如果系统里没这个组件安装程序会在功能选择之后突然失败而且是回滚式失败前面明明一切正常最后提示“发生致命错误”。另外Windows 10 对权限模型比 Win7 更严格。SQL Server 安装需要写注册表、创建服务、配置启动账户如果以普通权限跑 setup.exe会在权限不够时静默回滚。这类问题通常不直接报“权限不足”而是日志里写 Access denied新手根本看不懂。所以安装前一定要用管理员身份运行安装程序。2. 安装前准备环境检查与避坑设置2.1 启用 .NET 3.5 的正确姿势最省事的方式是打开“控制面板 → 程序和功能 → 启用或关闭 Windows 功能”勾选“.NET Framework 3.5包括 .NET 2.0 和 3.0”然后等它在线下载。如果在线下载一直卡住或报“无法连接到 Windows Update”可以用 DISM 指定本地安装源dism /online /enable-feature /featurename:NetFx3 /all /source:D:\sources\sxs其中 D: 是 Windows 10 安装镜像挂载后的盘符.NET 3.5 安装源在镜像的 sources\sxs 目录下。注意启用 .NET 3.5 后建议重启一次重启完再继续 SQL Server 安装。我在实际安装中还遇到过一种情况系统提示 .NET 3.5 已经开启但 SQL Server 安装到一半依然报“sql_engine_core 安装失败”。后来发现是 VC 2008 / 2010 运行库缺失。所以安装前最好把常见 VC 运行库一次装齐省得多走弯路。2.2 权限、杀软和兼容模式安装 SQL Server 之前我习惯先把用户账户控制 UAC 拉低打开“更改用户账户控制设置”滑块拖到“从不通知”确认后重启。等安装完成后再恢复默认。如果不关 UAC有时 setup.exe 启动子进程时子进程没有继承管理员权限导致安装文件“首次加载”变慢甚至卡在白屏。然后退出第三方安全软件临时关闭 Windows Defender 的实时防护。杀软拦截 SQL Server 注册表写入和服务启动是最常见的中途失败原因而且日志可能根本不提杀软两个字。卸载或者完全退出不一定必要但实时防护一定要关。最后右键 setup.exe → 属性 → 兼容性 → 勾选“以兼容模式运行这个程序” → 选择 Windows 7同时勾选“以管理员身份运行”。如果你从镜像根目录运行 setup.exe 没有反应建议进入镜像内的 x86 或 x64 目录找 setup.exe 再运行。老镜像经常只有 x86\setup\setup.exe 才是真正的安装程序根目录那个只是个引导器。注意兼容性模式不要选 Windows XP 或 Vista否则版本检测结果更糟。选 Windows 7 是折中方案安装器能识别系统版本又不至于使用过旧的行为。2.3 磁盘与文件路径要求安装包一定要解压到本地磁盘不要在“网络驱动器”或 BitLocker 加密的临时盘上运行。路径不要带中文和长空格错误示例C:\用户\张三\下载\SQL 2008 安装包\新建文件夹\正确示例D:\SQL2008Setup如果你用的是挂载 ISO建议把 ISO 里的文件完整拷贝到本地新目录再运行 setup.exe。原因是挂载盘符调用子程序时老代码有时会解析路径出错尤其是带卷标的虚拟光驱。磁盘空间至少预留 15GB不要以为网上说的 3GB 够用。因为后面还有补丁、示例数据库和管理工具空间不够时安装器会在写数据文件阶段失败而且这种失败不提示磁盘不足只是在汇总页报“文件复制失败”很难排查。3. 图文实操从插入介质到安装完成3.1 安装中心与产品密钥运行 setup.exe 之后看到“SQL Server 安装中心”窗口左侧有五个标签计划、安装、维护、工具、资源。进入“安装”标签点击第一项“全新 SQL Server 独立安装或向现有安装添加功能”。如果你看到“产品密钥”页不同版本逻辑不太一样标准版和企业版集成镜像一般自带 Key不用手动输入开发版可以选择“指定可用版本”下拉选择 Enterprise Evaluation或者输入开发版密钥Express 版不需要 Key别在这里随便输入网上找的 Key装完发现变成 Express功能差别很大。开发版在官方渠道可以免费申请交给时间和邮箱就能拿到。3.2 许可条款和安装规则勾选“我接受许可条款”其余可以默认不勾继续。安装规则检查大约需要几秒页面会列出所有检查项。常见的 Fail 项及处理思路“性能监视器计数器要求”为 Fail不是死路详见第 5 节修复“安装程序兼容性”警告老镜像常见一般允许继续“重新启动要求”为 Fail电脑需要先重启释放文件锁规则检查通过后进入“功能选择”。这一步决定你后面能不能用图形工具管理数据库。新手常犯的错是只勾选了“数据库引擎服务”装完才发现没有 Management Studio只能在命令行里敲 sqlcmd然后又折腾下载一套新工具。其实 SQL Server 2008 R2 安装包自带 Management Studio只要勾选“管理工具-基础”和“管理工具-完整”就会一起装。推荐勾选数据库引擎服务SQL Server 复制可选管理工具-基础管理工具-完整集成服务、分析服务按需勾选3.3 实例配置默认实例还是命名实例实例配置页有两个选项默认实例实例名 MSSQLSERVER连接时直接写主机名或 localhost命名实例比如 SQL2008连接时写作“主机名\SQL2008”开发机推荐默认实例连接字符串最省事。但如果你电脑上已经装了其他 SQL Server 实例哪怕是 Express默认实例可能装不上只能选命名实例。页面底部“检测到的实例”列表里能看到当前机器已有的实例。命名实例的好处是同一台机器上可以多版本共存坏处是连接字符串必须带实例名配置老应用时如果只填 IP 不填实例名就连接失败。3.4 服务账户与排序规则服务账户页面需要关注几个东西SQL Server Database Engine建议选 NT AUTHORITY\NETWORK SERVICE这是本地系统内置账户权限刚刚好不需要密码SQL Server Agent如果机器上要跑维护作业就设自动启动只是开发测试设手动也行SQL Server Browser使用命名实例时一定需要选自动启动不要给服务账户随便绑定一个普通域用户并手动输密码一旦密码过期SQL 服务直接起不来这是生产环境的血泪教训。排序规则保持默认“Chinese_PRC_CI_AS”即可表示简体中文、不区分大小写。如果老系统数据库原本用的是别的排序规则最好保持一致比如区分大小写的 Latin1_General_BIN。排序规则不一致会导致字符串比较行为变化中文排序、大小写敏感度都可能出问题上线后很难查。3.5 身份验证模式与 sa 密码这一步非常核心。很多老应用连接 SQL Server 时要求使用 SQL Server 身份验证最常见的就是“sa”账号所以安装时一定要选“混合模式”并设置 sa 密码。密码要求SQL Server 2008 会强制遵守 Windows 密码策略长度至少 8 位、包含大小写字母数字和特殊字符。如果你输入“sa123”这类弱密码会弹“密码太弱”警告并可能阻止下一步。不要图省事把 sa 设成空密码也不要勾选“拒绝远程连接”除非你确定这台数据库完全不需要远程访问。如果安装时选错了身份验证模式事后也可以改SSMS 里右键服务器 → 属性 → 安全性 → 服务器身份验证 → 选“SQL Server 和 Windows 身份验证模式”确定后重启服务。注意改这个必须重启 SQL 服务才生效。还有一个容易踩的坑SQL Server 2008 默认开启密码过期策略。某些老应用用 sa 密码连续连了半年某天突然全部报连接失败就是这个原因。如果公司没有域组策略管控开发环境可以在服务器属性 → 安全里关闭“强制实施密码策略”但生产环境不建议。3.6 数据目录与 TempDB 配置安装向导的“数据目录”页面会列出数据根目录、备份目录、TempDB 目录。默认都在 C 盘 Program Files 下面。如果你想让数据放非系统盘要注意数据目录和日志目录不能放在 FAT32 分区必须 NTFS不能在压缩文件夹或加密文件系统目录里装数据库目录不能用中文或带空格越简单越好尽量给 SQL 数据目录单独的文件夹比如 D:\SQLData不要在 D:\ 根目录直接建库TempDB 在并发高的系统上是性能瓶颈生产库建议把 TempDB 数据文件放到独立磁盘。开发机无所谓默认安装就行这里不用花太多心思。3.7 错误报告与安装执行错误报告页的两个勾选建议去掉不发送错误报告也能减少网络请求。继续到下页汇总功能列表检查一下要安装的组件清单确认没问题后点安装。安装进度会比较长5 到 15 分钟都正常。如果进度条停在某一项超过 40 分钟或者弹窗“依赖项失败请安装 Windows 补丁”不要急着杀进程先去看安装日志。日志位置在C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\。重点打开 Summary.txt搜索“Error”关键字能定位到具体失败的组件。这个习惯能省掉大量盲目重装的时间。4. 安装收尾服务验证与连接设置4.1 服务是否存活安装完成后别急着关窗口先打开服务管理器 services.msc确认三个关键服务服务名期望状态说明SQL Server (MSSQLSERVER)正在运行核心数据库引擎SQL Server Agent (MSSQLSERVER)已启动或自动计划作业开发机可手动SQL Server Browser正在运行命名实例必需默认实例可不启如果 SQL Server 服务没有启动右键看属性里的“可执行文件路径”确认实例目录名称对不对。再不行就去 Windows 事件查看器看系统日志和应用程序日志里的报错来源是哪里。4.2 使用 SSMS 做第一次连接如果你用的是 SQL Server 2008 安装包自带的旧版 Management Studio第一次启动连接时可能会遇到 TLS 协议错误。这是 Win10 默认禁用 TLS 1.0/1.1 导致的。解决办法有两个下载新版 SSMS18.x 或更高版本安装新版客户端没有 TLS 1.0 依赖在系统里强制启用 TLS 1.0 和 1.1不推荐安全风险高连接时服务器名称按实例类型填默认实例localhost 或 127.0.0.1命名实例localhost\实例名先试 Windows 身份验证能连就说明服务正常。再测试 sa 登录确认安装时设的密码有效。都通过后建一个测试数据库写一句 SQL 验证CREATE DATABASE TestDB; GO SELECT name FROM sys.databases; GO能返回 TestDB 和系统库列表说明这套环境已经可以正常跑业务了。4.3 开启 TCP/IP 和防火墙规则默认情况下SQL Server 在 Windows 10 上装完只能本机访问。局域网里其他机器要连必须手动做两件事第一打开“SQL Server 配置管理器”展开“SQL Server 网络配置”找到实例协议双击 TCP/IP把“已启用”改为“是”确定后重启 SQL 服务。第二防火墙放开 1433 端口。管理员 PowerShell 里执行New-NetFirewallRule -DisplayName SQL Server 1433 -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow放行之后用 telnet 验证telnet 127.0.0.1 1433如果出现黑窗或者提示连接成功网络层就没问题了。如果连接被禁止或超时优先检查 TCP/IP 是否启用和 SQL 服务是否重启其次才是防火墙。4.4 关于旧版 SSMS 的替代方案老版 SSMS 在新系统上不仅 TLS 有问题界面渲染和中文编码也偶尔出毛病。我现在的习惯是直接不用安装包自带的管理工具装完数据库后单独装新版 SSMS 或轻量级的 Azure Data Studio。新版 SSMS 完全能连 SQL Server 2008兼容性没问题功能也覆盖老版本。如果只是日常跑查询脚本Azure Data Studio 启动更快字体和跨平台体验更好。但老 DBA 多数还是习惯 SSMS顺手就行。5. 常见问题速查与排查实录5.1 安装程序卡在“正在提取文件”现象setup.exe 运行后一直停留在“正在提取文件”或白屏任务管理器里能看到 setup.exe 子进程但 CPU 和磁盘占用率都不动。原因通常是安装路径有问题、权限不够或者安全软件把释放出来的临时文件锁住了。处理路径清晰把 ISO 完整解压到纯英文目录再运行 setup.exe右键 setup.exe 用管理员身份运行临时关闭杀毒软件实时防护和 Windows Defender如果还卡打开任务管理器把残留的 setup.exe 全部结束再换一个安装用户账号试一次5.2 性能监视器计数器要求失败现象安装规则检查时某一项直接 Fail提示“Performance Monitor Counter Requirement”。原因是系统性能计数器资源损坏通常是Perflib注册表项里的 Last Counter 或 Last Help 值不对或者性能服务异常。处理第一步管理员命令行执行重建lodctr /R这个命令会重建性能计数器资源。如果仍然失败再检查 Windows 管理服务仓库winmgmt /verifyrepository如果报告不一致可以执行winmgmt /salvagerepository修复后重新运行 SQL Server 安装程序规则检查基本能过。不要直接去注册表硬改 Last Counter 值不知道基准值的情况下越改越乱。5.3 安装到最后回滚错误 29506现象安装进度条已经走到最后结果突然回滚日志里出现“严重错误 29506”。这个错误本质是 SQL Server 安装包里的某个 VSTO 或 SQL 工具扩展注册失败常见于老安装程序在 Win10 上权限模型不兼容。解决办法以管理员身份重新运行安装程序在兼容模式 Windows 7 下安装关掉 UAC 和第三方杀软后再装一次如果日志指向“VSTO”相关组件先单独安装 VSTO 运行库再重装 SQL Server重装之前建议先建立一个系统还原点防止反复失败把系统搞出奇怪问题。5.4 服务启动失败或启动后自动停止现象安装完成后服务没有运行手动启动又立刻停止事件日志里出现“Windows NT 当前密码不正确”或“句柄无效”之类提示。先说常见原因服务账户权限不足或密码策略变更导致 SQL 服务无法访问数据目录。处理办法确认运行 SQL 服务的账户是否对C:\Program Files\Microsoft SQL Server\下的实例目录有完全控制权重新选择服务账户为 NETWORK SERVICE然后重启服务检查系统事件日志看有没有卷影副本或磁盘加密相关错误如果日志提示“句柄无效”可以试试把数据库服务文件路径里的权限重置一下右键数据目录 → 属性 → 安全给 NETWORK SERVICE 加上完全控制。5.5 sa 登录失败或被锁定现象使用 sa 登录时提示“登录失败”或者登录几次后被锁定。这类问题优先级从高到低排查确认实例是不是混合模式SSMS 里服务器属性 → 安全性看身份验证模式确认 sa 密码是否过期或被改过用 Windows 身份验证登录执行 ALTER LOGIN sa WITH PASSWORD确认登录是否被锁定查看 sa 属性里的“登录已锁定”标记如果是清除锁定对于老应用还要注意连接字符串里的“初始目录”指向的数据库是否存在。sa 能登录但应用报错经常是默认数据库被删了或者被改成不存在的库名连登录都建立不起会话。5.6 远程连接提示“目标计算机积极拒绝”现象局域网其他机器用 IP 连接时报“provider: TCP Provider, error: 0 - 由于目标计算机积极拒绝”。这个提示意味着客户端发起了 TCP 连接但服务端没有监听。处理顺序检查项操作SQL 服务是否运行services.msc 里看 SQL Server 状态TCP/IP 是否启用SQL Server 配置管理器 → 实例协议 → TCP/IP 启用端口是否监听本机执行netstat -ano | findstr 1433防火墙端口放行 1433 入站规则连接字符串命名实例必须带实例名不能只写 IP很多情况下“积极拒绝”不是防火墙拦截而是 TCP/IP 协议根本没启用SQL Server 并没有监听在 1433所以问题不大先把协议打开就好。6. 如果实在装不上换一种思路SQL Server 2008 已经非常老了安全补丁早已停止更新。在 Windows 10 上长期跑老版本数据库相当于把一个漏洞库暴露在网络上。所以先想清楚你到底是真的需要 SQL Server 2008还是需要和某个老库兼容如果是前者又折腾了很久装不上我建议放弃裸机安装改用到虚拟机方案。用虚拟机软件建一个隔离环境系统装 Windows 7 或 Windows Server 2008 R2镜像里跑 SQL Server 2008 会顺畅很多。数据库文件放在虚拟磁盘里宿主机通过共享目录或备份还原方式交换数据稳定性和安全性都更好。如果是后者比如只是需要一个能跑老语法的开发环境建议直接装新版 SQL Server Developer 版免费兼容绝大部分 2008 语法和数据类型。然后再把老库备份还原到新实例里通常不需要改代码就能跑通。当然有些老应用确实只认 SQL Server 2008 的某些特殊行为比如排序规则、加密函数版本、ODBC 驱动。这种情况下在用户可接受的前提下评估一下应用升级或数据迁移的代价往往比硬塞一个淘汰软件到新系统上更省心。说实话我在帮某公司老系统做环境迁移时装 SQL Server 2008 在 Win10 上踩的坑比装任何新数据库都多。印象最深的一次是安装到一半突然回滚翻日志发现罪魁祸首是第三方杀软把安装文件隔离了。从那之后我的习惯就固定下来镜像下完先校验完整解压后先关杀软、降低 UAC、装好 .NET 3.5最后才运行 setup.exe。顺序一旦乱后面就是无尽的“秒回滚”。所有安装步骤都用管理员账号执行路径全部英文无空格。如果非生产用途能装新版 SSMS 就绝不用老版。希望这篇文章能帮你少折腾几晚一次把库装起来。
返回列表