ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SQL Server 2019重新安装失败?彻底卸载与残留清理全流程详解

SQL Server 2019重新安装失败?彻底卸载与残留清理全流程详解 碰到 SQL Server 2019 重新安装失败这件事说实话十个里有八个都是卸载环节埋的雷。我自己处理过不少这种“装不上”的求助现象五花八门安装向导走到中间弹出红叉、报 0x858C001B、说“此计算机上已存在相同实例”、或者某个规则检查直接挂掉。很多人第一反应是重装系统其实没必要绝大多数情况是因为上一次卸载根本没卸干净残留的注册表项、服务、文件把新的安装程序给“骗”了。这篇文章就是专门聊 SQL Server 2019 重新安装失败的完整处理思路从备份数据、彻底卸载、清理残留到重新安装时要注意的关键配置一条线讲清楚。不管你是给生产环境做维护的 DBA还是在开发机上反复折腾数据库的工程师甚至只是第一次被安装报错折磨的学生照着这个流程走一遍大概率能把问题解决掉。1. 重新安装为什么总是失败先说结论SQL Server 2019 的重新安装失败和首次安装失败有本质区别。首次安装失败通常是环境问题比如缺 .NET Framework、缺 Visual C 运行库、磁盘空间不够但重新安装失败几乎都指向同一个根源上一次的卸载动作不彻底系统里残留了大量和 SQL Server 相关的“尸体”。这些残留物藏得很深分布也散。最常见的有这么几类注册表残留卸载程序没有删除干净HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server下的实例信息导致安装程序误以为实例已存在。服务残留SQL Server 相关的 Windows 服务没有删掉比如SQL Server (MSSQLSERVER)、SQL Server Agent新的安装程序检测到同名服务就拒绝继续。文件残留C:\Program Files\Microsoft SQL Server目录下还有旧的程序文件、数据库文件或者日志安装程序检查路径时发现冲突。挂起的文件重命名操作Windows 在系统更新或软件安装后会记录“PendingFileRenameOperations”如果里面有旧 SQL Server 的文件操作记录安装程序会觉得系统处于不稳定状态直接中断。除了残留问题重新安装失败还有一些次要原因安装包本身损坏、权限不足没有用管理员身份运行、杀毒软件拦截了服务创建、端口被占用、甚至系统时间不正确导致证书校验失败。但我的排查习惯永远是先清理残留再考虑这些环境因素因为残留问题占比实在太高了。另外一个很容易被忽略的点如果你之前装过 SQL Server 2008、2014、2016 等旧版本再装 2019同样可能遇到“重新安装失败”的问题。不同版本之间共享组件会冲突比如 SQL Server 的共享功能、客户端 SDK 等旧版本卸载不干净同样会堵住新版本的安装路径。所以处理这类问题我建议按固定的顺序来先保数据再彻底卸载接着清理残留最后重新安装。每一步都有目的没有一步是多余的。2. 动手之前先做两件事备份数据与记录配置很多人一看到安装失败就急着卸载重装这个顺序不对。在动卸载器之前你必须先把两件事做好否则数据丢了哭都来不及。2.1 检查数据库文件先把“家底”保住SQL Server 的数据库文件默认存放在C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA目录下如果你在安装时改过数据目录那位置会不一样。每个用户数据库对应一个.mdf主数据文件和一个.ldf日志文件master、msdb这些系统数据库也在同一个目录里。如果你的 SQL Server 服务还能启动那最稳妥的方式是用 SSMS 或者命令行把需要的数据库做一次完整备份BACKUP DATABASE [你的数据库名] TO DISK ND:\backup\你的数据库名.bak WITH INIT, COMPRESSION;如果服务已经起不来了也别慌。先把数据库服务停掉然后把整个 DATA 目录完整复制到其他盘符。注意复制之前一定要确保 SQL Server 服务是停止状态否则文件被占用复制出来的 mdf 可能是损坏的。复制完数据文件后哪怕最后重装系统你也可以在新环境里通过“附加数据库”的方式把数据找回来。这里我要特别提醒一句不要只复制 mdf 不复制 ldf。虽然 SQL Server 在某些情况下能通过重建日志附加数据库但这样做有风险而且附加时会报 823、824 之类的 I/O 错误。两个文件一起复制才是最稳妥的。2.2 记录实例关键配置避免重装后抓瞎卸载重装之后配置全部归零如果你不提前记录后面会花大量时间回忆当时到底设置了什么。重要配置包括实例名称默认实例是MSSQLSERVER命名实例是计算机名\实例名。端口号默认是 1433但很多人改过记录一下之前的端口。服务账户SQL Server 引擎服务用的是NT Service\MSSQLSERVER还是自定义账户。排序规则这个非常重要如果重装后排序规则和之前不一致附加旧数据库后字符串比较、索引查询可能出现诡异的结果。如果你想不起来这些配置可以在服务还能启动的前提下用下面这组 SQL 快速查询SELECT SERVERPROPERTY(InstanceName) AS InstanceName, SERVERPROPERTY(Collation) AS Collation, SERVERPROPERTY(Edition) AS Edition, SERVERPROPERTY(ProductVersion) AS ProductVersion;端口号可以查注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp\IPAll看TcpPort或TcpDynamicPorts的值。把这些信息记到记事本里重装完成后对照恢复能省掉很多麻烦。还有一件事容易被忽略确认一下这台机器上到底装了哪些 SQL Server 功能。比如是否安装了 Analysis ServicesSSAS、Reporting ServicesSSRS、Integration ServicesSSIS、全文本搜索、复制组件等。打开“控制面板-程序和功能”把所有带“SQL Server”字样的条目截图保存卸载时挨个对照确保没有遗漏。3. 真正干净的卸载方案从服务到注册表一个不留很多人卸载 SQL Server 就是在控制面板里右键点“卸载”然后以为完事了。其实 SQL Server 的组件很多卸载顺序错了后面的卸载会失败或者残留。正确的卸载流程是“先停服再按顺序卸载功能然后重启”。3.1 卸载前的准备停服务、断开连接卸载前要确保没有程序正在连接数据库。如果你是在开发机上瞎折腾直接停服务就行如果是生产环境先通知业务方维护窗口再动手。以管理员身份打开命令提示符或者 PowerShell停掉核心服务net stop MSSQLSERVER /y/y参数会一并停止依赖该服务的其他服务比如 SQL Server Agent。如果你是命名实例服务名通常是MSSQL$实例名命令要相应调整。除了引擎服务还有 Reporting Services、Analysis Services、Integration Services 等服务在 services.msc 里把所有名字带 SQL 的服务都找到并停止。停完服务后顺手把 SQL Server 相关的计划任务、开机启动项也检查一遍避免卸载到一半有程序尝试启动服务导致卸载失败。3.2 控制面板卸载的完整顺序打开“控制面板-程序和功能”你会看到一长串 SQL Server 相关的条目这不奇怪。正确地卸载顺序是先卸载“SQL Server 数据库引擎”等实例级功能再卸载“SQL Server 共享功能”最后卸载本地客户端组件。以 SQL Server 2019 为例典型条目包括Microsoft SQL Server 2019 (64-bit)Microsoft SQL Server 2019 Setup (English or 中文)Microsoft SQL Server Management Studio如果单独装过Microsoft SQL Server 2019 LocalDBMicrosoft SQL Server 2019 共享功能在碰到Microsoft SQL Server 2019 (64-bit)这个主条目时右键选择“卸载”会弹出 SQL Server 安装中心可以选择“删除”某个实例。按照向导选中要删除的实例并勾选包含的数据库引擎等功能点击“删除”后会提示你选择要删除的功能把实例下的所有功能都打勾确认。卸载过程比较慢大概需要几分钟到十几分钟视机器性能而定。遇到提示“是否删除 Analysis Services 数据库”之类的直接选择删除因为我们要的是彻底清理。主实例删除后返回“程序和功能”页面卸载剩下的共享功能条目比如Microsoft SQL Server 2019 Setup、Microsoft SQL Server 2019 LocalDB等。这些可以按任意顺序卸载但要注意是否提示“其他组件正在使用”如果有先停用相关依赖。3.3 使用安装介质的卸载模式做深度清理控制面板卸载并不是唯一途径而且有时候控制面板里某些 SQL Server 条目会卸载失败比如提示“安装程序找不到源文件”。这种情况可以用安装介质来卸载效果更好。把 SQL Server 2019 的 ISO 挂载或者解压出来以管理员身份打开命令提示符进入安装介质目录运行setup.exe /actionUninstall /FEATURESSQL,AS,RS,IS,Tools /INSTANCENAMEMSSQLSERVER/FEATURES参数可以按需调整SQL代表数据库引擎AS是 Analysis ServicesRS是 Reporting ServicesIS是 Integration ServicesTools是管理工具。这种方式的优势在于安装程序会按照内部的依赖关系把指定功能连同注册表项、服务一起清理掉比手动在控制面板里逐个卸载要彻底得多。卸载完成后强制重启一次系统。这一步非常关键很多 Windows Installer 的清理操作需要重启后才能最终落盘跳过重启继续安装大概率又会报错。4. 残留清理的完整清单注册表、文件、服务、挂起项重启回来后你以为装完了差得远。如果没有按下面清单逐项检查你很可能还会在安装过程中遇到各种莫名其妙的问题。4.1 注册表里那些“阴魂不散”的键注册表是重装失败的第一大雷区。SQL Server 卸载后会自动删除大部分注册表项但总有漏网之鱼。打开注册表编辑器regedit重点检查以下路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSQLServer HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Instance Name如果这些键下面还有内容尤其是包含MSSQL15.MSSQLSERVER或MSSQL15.你的实例名的子键就说明残留没有清干净。右键删除对应子键。注意删除注册表前一定要先备份。在 regedit 中选中要删除的键右键选择“导出”保存一份 .reg 文件。万一删错了双击 .reg 文件就能恢复。另外64 位系统上 32 位程序的注册表在HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SQL Server如果之前装过 32 位组件这里也要检查。还有卸载信息的位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall在这里搜索包含“SQL Server”或“MSSQL”的键如果对应的程序已经卸载掉了但键还在手动删除这些卸载入口不然安装程序会以为旧组件仍然存在。清理注册表确实需要点耐心我的习惯是按关键词搜SQL Server、MSSQL、SQLServer、SQL_搜出来逐条判断。注意有些第三方软件也会用这些关键词别误删其他软件的注册表项只处理明确属于 SQL Server 2019 实例的部分。4.2 文件系统残留不是删掉安装目录就完事注册表清理干净后接着清理文件。默认的安装目录残留最多包括C:\Program Files\Microsoft SQL Server这是主目录卸载后应该被清空但经常有残留。C:\Program Files (x86)\Microsoft SQL Server32 位组件的目录。C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log安装日志目录里面记录了所有安装和卸载过程后面排查问题还要用到暂时别删。删除前检查一下目录里有没有你已经备份过的数据文件确认无误后整个目录删除。如果提示文件被占用多半是某个 SQL 服务还在运行回到 services.msc 再检查一遍。除了 Program Files还有几个地方容易漏C:\ProgramData\Microsoft\Windows\WER\ReportQueue下可能有 SQL Server 的崩溃报告不影响安装但顺手清理也好。C:\Windows\Temp下的SQL_*临时目录安装程序解压临时文件会用到如果里面有旧内容可能导致解压冲突可以清空。如果之前把数据目录、备份目录设在其他盘比如D:\SQLDATA也要记得清理避免下次安装时数据目录占用检查不过。4.3 服务与挂起操作最容易忽略的两个坑打开 services.msc按名称排序找“SQL”相关内容。正常情况下卸载干净后应当一个 SQL Server 服务都不剩。如果还有残留服务比如SQL Server (MSSQLSERVER)、SQL Server Agent、SQL Server Reporting Services等说明卸载程序没有把服务删干净。处理方法是直接删除服务。以管理员身份打开命令提示符运行sc delete SQLSERVERAGENT sc delete MSSQLSERVER服务名需要根据实际情况填充可以先执行sc query | findstr /i sql查看所有含 SQL 的服务名再逐个删除。删除服务后不需要立即重启但建议保持管理员窗口后面安装时还要用。另一个大坑是“挂起的文件重命名操作”。Windows 安装程序在操作文件时会把需要重启后执行的操作记录在注册表里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations如果这里面有旧 SQL Server 文件的重命名或删除操作安装程序运行时会认为系统有未完成的操作直接拒绝安装 SQL Server甚至会提示需要重启但重启后依然报错。处理方法是把PendingFileRenameOperations的值导出备份然后针对性地删除其中包含 SQL Server 或 MSSQL 的条目。如果整个键本来就是空的说明问题不在这。注意如果你不确定其他条目是否被系统程序依赖尽量只删明确指向 SQL Server 的条目。4.4 性能计数器与 WMI症状隐蔽但影响大SQL Server 安装时会做“性能计数器规则检查”如果系统里 SQL Server 的性能计数器残留不一致安装向导会直接判定规则失败而且错误信息非常隐晦。处理方式是用管理员命令行删除并重建 SQL Server 性能计数器unlodctr MSSQLSERVER删除后一般不需要手动重建新的安装程序会注册新的计数器。如果卸载时计数器没删干净还可以在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib里检查是否有 SQL 相关条目有的话谨慎清理。WMI 数据库偶尔也会有问题不过较少见。一般情况是在命令行运行winmgmt /verifyrepository检查 WMI 仓库是否一致如果显示不一致可以试试winmgmt /salvagerepository。这一步非必须但如果你之前用 WMI 管理过 SQL Server值得做个检查。5. 重新安装时的关键检查别换汤不换药清理完成重启系统接下来才真正来到“重新安装”这一步。但如果你直接双击 setup.exe 就开始装有可能再次踩坑。安装前的检查和环境准备决定了这次安装能不能一次性通过。5.1 系统组件与环境检查SQL Server 2019 对系统组件有硬性要求。缺了这些安装程序会直接亮红灯而且提示可能说得不清楚。常见的硬性依赖有.NET Framework 4.7.2 或更高版本最好是 4.8。Microsoft Visual C 2015-2019 Redistributable (x64)注意 x86 版本也需要。Windows PowerShell 3.0 或更高版本。磁盘空间至少 6GB实际建议至少 10GB因为安装过程会释放大量临时文件。如果“程序和功能”里看不到Microsoft Visual C 2015-2022 Redistributable (x64)建议先去微软官网下载最新的运行库装上再跑 SQL Server 安装向导。不要觉得这只是走个过场很多 0x858C001B 错误就是 VC 运行库缺失导致的。另外安装前务必把杀毒软件的实时防护暂时关闭特别是 360、火绒这类会监控注册表和服务的软件。SQL Server 安装过程中要创建服务、写注册表、释放文件杀毒软件拦截任何一步都可能导致安装失败或者装完才能发现文件缺失。装完再打开杀毒不影响。5.2 安装介质、版本与目录选择的注意事项清理完系统环境再看安装介质本身。SQL Server 2019 的安装包可以从微软官网下载Developer 版对开发和测试是免费的功能上和企业版一致只是授权不同。下载之后建议校验一下文件哈希避免下载损坏导致安装到一半报错。Get-FileHash -Path D:\download\SQLServer2019-x64-ENU.iso -Algorithm SHA256用官方公布的哈希值对照。如果你是在国内网络环境下载整个过程可能会比较慢但不要用各种来路不明的“加速版”“破解版”安装包安全性和稳定性都没法保证。解压或挂载 ISO 后用管理员身份运行setup.exe在安装界面选择“全新 SQL Server 独立安装”。如果系统还保留着旧实例的注册表项这一步可能会提示检测到已有实例说明前面的清理没做到位回到第 4 章继续检查。实例名和功能选择上我的建议是如果你的业务场景没有特殊要求就沿用之前的实例名这样后面附加数据库、还原备份时不需要改连接字符串。数据目录如果之前设在非系统盘安装时记得指定同样的路径且确保该目录对 SQL Server 服务账户有完全控制权限。5.3 服务账户、防火墙与端口配置服务账户是安装时最容易配错的地方。SQL Server 2019 默认使用虚拟账户NT Service\MSSQLSERVER普通场景下完全够用不建议改成LocalSystem或Network Service因为权限过大容易引入安全问题。如果你在记录配置时发现之前用的是域账户重新安装时要确保该账户还有权限并且密码没有过期。在“数据库引擎配置”页面里服务账户那一列可以手动输入账户和密码同时给 SQL Server Agent 也选好启动类型建议设成“自动”。防火墙方面如果你之前改过端口安装完成后在 Windows 防火墙中要放行对应端口。SQL Server 默认放行的是 1433如果你用动态端口防火墙要放行sqlservr.exe程序本身否则远程连接会被拦。这个虽然不属于“安装失败”的问题但装完连不上的求助我也见过一堆提前做好省得后面折腾。还有一个小细节安装过程中如果出现“SQL Server 安装程序需要重启计算机”的提示重启后再继续安装不要试着绕过。有些人不重启硬往下装最后日志里报系统文件被占用前功尽弃。6. 常见错误代码与排查实录就算你把前面的步骤都走了一遍安装时还是可能遇到意外。与其盲目重试不如学会看日志和错误码针对性解决。6.1 典型错误速查表我整理了 SQL Server 2019 重装时最常遇到的几类错误你可以对照自己的报错快速定位。错误码 / 报错信息常见原因解决思路0x858C001B文件加载失败通常和残留程序集、权限有关清理注册表与安装目录确认以管理员运行关闭杀毒软件“此计算机上已安装相同实例”实例注册表键或服务残留删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server下对应实例子键删除残留服务“性能计数器注册表配置单元不一致”SQL Server 性能计数器残留损坏管理员命令行执行unlodctr MSSQLSERVER再重新安装让程序重建“Microsoft Visual C 2019 Redistributable (x64) is not installed”VC 运行库缺失或损坏下载安装 VC 2015-2022 x64 和 x86 运行库后重试“安装程序无法访问网络位置”安装包路径有中文或权限不足解压到纯英文路径用管理员身份运行安装过程中“回滚”安装日志中记录的某个规则失败打开C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log\Summary.txt查看具体错误0x84B10001系统配置检查失败查看规则检查列表逐项确认 .NET、磁盘、内存等是否满足要求“Windows Installer 服务无法安装”Windows Installer 缓存损坏或服务被禁用重启 Windows Installer 服务必要时清理C:\Windows\Installer下损坏的缓存这张表不是万能药但覆盖了我遇到过的绝大多数重装失败场景。如果你按表中的方向排查还是无解那就得去日志里找答案了。6.2 看日志定位根因比盲猜高效十倍SQL Server 安装程序会生成非常详细的日志位置在C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log\在这个目录下你可以找到Summary.txt它会汇总整个安装过程的规则检查结果、功能安装结果、错误信息。如果安装失败打开 Summary.txt 搜索“Error”或者“Failed”通常能找到确切的功能点和失败原因。再往下看每个功能组件还会有独立的日志文件比如SqlEngineDB_Install_Core64_....log、SqlFullText_Install_Core64_....log等。这些日志内容很长新手容易看懵我的建议是先找[Error]或[FAILED]关键字再看这些错误附近的上下文不需要通读全篇。比如我遇到过一种情况日志里反复出现“could not find file: C:\Windows\assembly...”顺着路径一查是 .NET 程序集缓存损坏重新注册 .NET Framework 才解决。如果不看日志单靠报错弹窗根本定位不到这个层面。注意Setup Bootstrap 日志会在下次安装时清理吗不会。它会按日期和序号保留多次安装日志找日志时看最新的那个目录别翻到几个月前的老日志。6.3 实在装不上时我的备选思路按前面所有流程检查完仍然装不上的情况极其罕见。如果真的遇到了我通常还会做几件事第一去 Windows 事件查看器里看“应用程序”日志找到 MSIInstaller 相关的错误事件。Windows Installer 的错误往往比 SQL Server 安装向导的提示更底层能提供额外线索。比如错误码 1619 表示安装包无法访问1627 表示安装脚本错误。第二用 SQL Server 2022 作为一个备选。它和 2019 的绝大多数管理习惯一致很多场景下的兼容性也保持得很好。如果你的业务约束允许换版本装 2022 能绕过 2019 特定版本的已知问题。当然这需要在确认业务兼容的情况下进行不要因为“装不上”就盲目替换生产环境的版本。第三不到万不得已不要重装系统。重装系统确实能解决 99% 的软件安装问题但代价是环境重建成本太高。在经历了多次 SQL Server 安装失败之后我认为把它当作“最后一招”而不是常规方案才是更理智的选择。写在最后说实话SQL Server 2019 重装失败这个问题本身并不难难的是大多数人没有耐心按顺序把残留清理干净。我处理过的最极端的一个案例是一台机器上装过 2008、2012、2016、2019 四个版本的 SQL Server重装时各种冲突最后花了一个下午从注册表到服务一层层剥洋葱才算彻底清干净。从那以后我给自己定的规矩是做任何数据库软件的卸载重装第一件事永远是备份数据和记录配置然后是停服、按顺序卸载、重启、清理注册表和服务、关杀毒软件、再安装。这套流程走下来重装失败的概率会大幅下降。最后再分享一个小技巧如果安装过程中遇到看不懂的报错不要急着百度复读错误码先打开 Summary.txt 看日志十次里有八次答案就在日志里。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进