ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TIA Portal卸载后SQL Server实例残留清理完整指南

TIA Portal卸载后SQL Server实例残留清理完整指南 装了一整天的TIA Portal V17加WinCC Professional项目交接完准备把测试环境卸掉腾出磁盘空间。卸载流程走完进度条归零我以为大功告成。结果打开服务管理器一看SQL Server (WINCC_PL) 依然亮着绿灯进程占用着几百兆内存。重启之后它还在。更麻烦的是之后想装一个新版本的TIA Portal安装程序第一轮检测就报错提示系统里已存在同名SQL Server实例。这种“卸载了但没完全卸载”的情况搞西门子自动化的同行应该不陌生。问题根源很清楚TIA Portal卸载时并没有把它顺带装进系统的SQL Server实例一并清理掉。WinCC本身必须依赖SQL Server来存历史数据、报警记录和组态信息这个实例是“赠送”的但赠送的不意味着卸载时会自动带走。很多人在这一步卡住要么重装系统要么手动删文件删出问题。这篇就是完整梳理一下我多次处理这个问题的思路和操作覆盖实例识别、卸载流程、注册表清理和验证方法适合正在被TIA Portal重装冲突或者系统残留占用困扰的自动化工程师。1. 为什么TIA Portal卸载后SQL Server WinCC实例会“赖着不走”1.1 从WinCC的数据存储机制说起WinCC不是简单的画面组态软件项目里每一个趋势曲线、每一条报警记录、每一个用户权限表背后都有数据库在支撑。早期WinCC使用Sybase SQL Anywhere后来全面转向微软的SQL Server。以TIA Portal集成的WinCC为例安装过程中会在本机创建一个专属SQL Server实例这个实例名通常长得像“WINCC_主机名”或者“WINCCLOCAL”不同版本、不同安装选项会有差异。这个实例承担的工作包括Runtime运行时归档、变量记录、报警归档、配方存储等。说白了没有它WinCC Runtime跑不起来组态画面里看到的实时曲线和历史趋势都无从谈起。问题在于这个SQL Server实例是微软的正经产品只是由西门子安装器“代为安装”的。TIA Portal的卸载程序只负责清理西门子自己的组件比如STEP 7、WinCC组态环境、仿真工具这些。对于SQL Server这种拥有独立卸载逻辑的第三方核心组件卸载器没有权限、也没有脚本去替微软执行卸载流程。强行去删反而不安全所以西门子的设计逻辑就是“不动它”。这是个典型的分工缺口。1.2 用生活化类比理解“卸载缺口”打个比方你从房屋中介那里租了整套公寓中介合同到期后离开了但公寓里的冰箱是房东从电器行租来的中介走的时候只管自己那部分并不会帮房东把冰箱还给电器行。房东根本不记得有这一步结果冰箱就一直留在屋里每个月照常耗电、占地方。TIA Portal就是中介SQL Server实例就是那台冰箱而真正负责归还的是微软的安装卸载程序。你不主动联系“电器行”它永远不会自己走。1.3 不管它会造成什么实际后果留着这个残留实例短期看着只是多占点内存。实际影响远不止这些开机自启常驻内存占用通常在500MB到1GB之间老电脑影响很明显。重装TIA Portal时安装程序会检测到已有SQL Server实例并直接中断安装报错信息往往让人摸不着头脑。如果新装版本需要不同版本的SQL Server两个实例同时存在容易引发端口冲突和版本冲突。实例服务默认监听1433端口如果机器联网等于多了一个不必要的攻入面。曾经有个朋友是在虚拟机里装的TIA Portal卸载后不管直接删了虚拟机文件倒是干净但如果只有这一台物理机、又不想重装系统就必须按下面的步骤来。2. 动手清理前必须先搞明白的三件事2.1 分清“要删的实例”和“要留的实例”最怕的情况是机器上同时跑着其他业务数据库比如MES系统用的SQL Server或者另一套SCADA系统自带的实例动手之前不区分清理时把老项目还在用的数据库也连锅端了。先执行一条命令查看当前所有本地实例。打开命令提示符管理员身份运行sqllocaldb info或者打开服务管理器按“SQL Server”过滤会看到类似SQL Server (WINCC_PL)、SQL Server (SQLEXPRESS)这样的服务项。在每个服务名称后面的括号内容就是实例名。WinCC相关实例的特征是实例名中一般带WINCC或者实例名与当前计算机名关联紧密创建时间往往和安装TIA Portal在同一天。从这里可以把疑似目标锁定下来。如果是SQL Server Express自带的SQLEXPRESS实例需要确认是不是之前装别的软件用的不要顺手删除。2.2 先备份可能还在用的WinCC归档数据很多项目在交付之后现场数据还需要追溯。WinCC Runtime的历史归档数据库文件默认存放在类似C:\Program Files\Microsoft SQL Server\MSSQL\DATA的目录下文件名是WinCC_ProjectName.mdf和对应的日志文件.ldf。如果你不确定这台机器上的归档数据是否还有人要最稳妥的做法是先把这些文件复制出去。操作顺序有讲究先停止SQL Server服务再复制文件。不停止服务直接复制数据文件属于正在被进程占据的状态复制出来的文件可能是损坏的。停止服务的方式net stop SQL Server (WINCC_PL)将服务名替换成你机器上实际的实例名。停止后把.mdf和.ldf文件复制到移动硬盘或其他目录后续即使彻底删除这台机器上的实例数据也还在。真到需要用的时候可以再装一个新的SQL Server实例并附加这些数据库文件历史数据依然能读出来。2.3 准备一份和原实例匹配的SQL Server卸载介质有人抱着侥幸心理直接在服务管理器里禁用服务、删除文件、清理注册表这样做确实能让系统表面看起来干净但痕迹清理不彻底而且很容易操作失误导致注册表损坏。正确路径是找到与原实例同版本的SQL Server安装介质用它的setup.exe走一遍标准卸载流程。我不知道当初安装的是哪个版本去这里查打开控制面板 → 程序和功能查找“Microsoft SQL Server 20xx”相关的条目后面的版本号会写明。如果已经不显示这条记录了去注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL里查看实例名再结合安装时间推断版本。例如TIA Portal V15到V16时代经常附带的SQL Server 2014/2016V17以后常见SQL Server 2019。对应的安装介质可以从微软评估中心下载版本相差一个SP补丁级别问题不大但大版本一定要一致否则卸载向导可能不识别已有实例。3. 完整清理流程从停服务到删数据的逐步实操3.1 停止所有与目标实例相关的服务先打开服务管理器找到以下类型的服务SQL Server (WINCC_PL)SQL Server Agent (WINCC_PL)SQL Server Reporting ServicesSQL Server Full-text Search (WINCC_PL)依次停止每一个不只是主服务。SQL Server Agent如果不停后台作业可能会在卸载过程中重新拉起某些组件导致卸载失败。停止命令通用格式net stop SQL Server (WINCC_PL) net stop SQL Server Agent (WINCC_PL)如果服务已经处于停止状态命令会提示服务未启动直接忽略即可。保险起见把SQL Server相关服务都设置成“手动”或“禁用”防止系统重启后又自动拉起。实际上在主服务停止后依赖它的代理和全文检索服务也无法单独运行。3.2 用SQL Server安装中心执行卸载插入下载好的SQL Server安装介质解压后以管理员身份运行setup.exe。导航路径依次是左侧菜单点“维护”。右侧选择“卸载”。在弹出的列表里勾选目标实例注意不要勾选其他实例。选择“删除数据”Data removal选项系统会再确认一次。等待卸载向导完成。这里说一个很多人纠结的点卸载界面上的复选框“删除数据”要不要勾选如果这台机器彻底不打算再用WinCC且前面已经备份过.mdf文件果断勾选“删除数据”。它会连同数据库文件、配置、系统数据库master、msdb等一起清理相比手工删除文件要干净得多。如果不勾选卸载后可能还会留下一堆数据文件占磁盘空间到时候还是要手动处理反而更繁琐。卸载向导跑完后服务管理器里正常情况下已经看不到这个实例了。但现实往往没那么顺利尤其是非标准安装或者中途卸载失败过的系统会有残留。3.3 手工清除残留的目录和文件即使卸载向导正常完成磁盘上大概率还会留下以下几类文件建议逐一检查C:\Program Files\Microsoft SQL Server\下的对应MSSQL实例目录例如MSSQL15.WINCC_PL。C:\Program Files\Microsoft SQL Server\Data\或C:\Program Files\Microsoft SQL Server\MSSQL\DATA下的数据文件。C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft SQL Server文件夹。C:\Users\用户名\AppData\Local\Microsoft\SQL Server中的用户级配置。删除这些目录时如果提示文件被占用说明有服务还在运行或者有进程没退出。可以打开任务管理器结束所有和SQLServr.exe相关的进程后再删。如果结束不掉大概率是某个服务没有停干净重新回到服务管理器确认一遍。3.4 处理残留的Windows服务注册项还有一种顽固情况删除数据文件后服务管理器里那个SQL Server (WINCC_PL)服务还在状态可能是“禁用”或“已停止”。这是因为卸载向导没有成功注销该服务。此时可以用sc命令直接删除sc delete MSSQL$WINCC_PL注意服务名不是显示名需要先用sc query查看实际的服务键名。运行sc query | findstr /i wincc sql它会列出所有与WinCC和SQL相关的服务名称找到里面MSSQL$开头的那一行才是真正的键名。删除服务后建议重启一次电脑让系统重新枚举服务列表确认服务不再出现。4. 注册表残留最隐蔽的“病根”4.1 为什么注册表残留会导致重装失败TIA Portal重装时它的安装引导程序会去注册表里查询是否存在已安装的SQL Server实例。即使你已经删掉了数据目录、停用了服务只要注册表里Instance Names下还有对应键值安装程序就会判定“机器上已有一个重名实例”然后直接停止安装。这也是之前提到的“最让人崩溃的报错”的根源。4.2 需要重点检查的注册表位置以下位置按优先级检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL这里保存着所有已注册的本地SQL Server实例名看到WINCC开头的键值右键删除。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\实例ID实例ID通常形如MSSQL15.WINCC_PL展开后能看到连接串、数据目录等信息整项删除。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer这是旧版SQL Server的注册表目录如果确认没有其他实例使用也要清理。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services服务注册信息找到之前说的MSSQL$WINCC_PL键并删除。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall这里留下的是“程序和功能”里的卸载条目如果控制面板还显示Microsoft SQL Server 20xx (WINCC_PL)就到这里找到对应子键删除。操作注册表前选中最顶上的项右键“导出”保存一份.reg文件作为备份。注册表编辑器本事再大误删一项系统也可能出问题备份是最后的后悔药。4.3 如何验证注册表已经清理到位打开注册表编辑器按CtrlF输入实例名关键词如WINCC_PL勾选“项”、“值”、“数据”逐个查找直到显示“注册表搜索完毕”。如果还有结果按照搜索结果的路径逐项清理。这个搜索过程可能要重复几遍因为有时同一个关键词会出现在多个不同路径下但搜索到的项很少多半是之前没删干净的挂在Instance Names或者某服务项下。清理完成后在注册表编辑器里再全盘搜索一次Windows Management Instrumentation对应的SQL Server WMI Provider相关项路径在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WMI\MSSC。WMI提供程序如果残留有时候会导致新实例安装时无法启动SQL Server配置管理器。5. 验证与善后确认实例真的被清干净了5.1 从服务、文件、注册表三层验证清理完成后不要急着装TIA Portal先花五分钟做三轮检查打开服务管理器搜索“SQL”确认不再有目标实例相关的服务项。打开Windows资源管理器确认之前的SQL Server安装目录和数据目录都已经删除或只剩空壳。打开注册表编辑器分别在Instance Names\SQL和Services路径下搜索目标实例名确认无结果。任何一层还有残留都不要轻易开始重装否则极可能重蹈覆辙在同一个坑里再摔一次。还有一个容易漏掉的位置C:\Windows\Temp和C:\ProgramData\Microsoft\Windows\WERWindows错误报告目录。SQL Server运行期间可能留下大量日志和临时文件虽然不影响安装但日积月累会很占空间顺手清理掉。5.2 重装TIA Portal前的一些建议重装新版TIA Portal之前建议做两件事确保机器满足新版软件的硬件要求。TIA Portal V18对内存和磁盘的要求比V16高不少官方推荐16GB起步。确认旧版本的安装痕迹已经消失不要在卸载不完全的旧版本上覆盖安装。西门子官方支持的是先彻底卸载再装新版本。如果这台机器曾经跑过WinCC项目并且项目组态文件用的是外部存储重装后要重新指定项目路径。旧归档数据库如果没有备份那部分历史数据就真的找不回来了所以第2.2步备份这一步真的不是走形式。5.3 我踩过的坑给同行的几个提醒第一次遇到这个问题时我犯过一个比较低级的错误图省事没有用setup.exe正常卸载直接删了SQL Server数据目录然后去注册表里把MSSQL相关项全部删掉。表面看着干净了重装TIA Portal时却提示“Windows Installer错误”系统日志里写着“无法找到已安装的SQL Server组件”。后来查了半天发现是注册表里还有一个系统级组件对应的CLSID键值没有删除安装程序因为找不到对应依赖才中断。那次之后我就老实了规范卸载流程真的不能跳。另外提醒一点在考虑是否勾选“删除数据”时如果你的项目数据库可能还有审计用途建议不要勾选卸载后把数据库文件单独侧存放比重新创建一个完全一样的历史归档库要容易得多。还有个细节部署在VM虚拟机里的Windows Server清理完SQL Server实例之后建议在虚拟机里做一次磁盘碎片整理。SQL Server卸载后会产生大量零散文件碎片整理后性能恢复更明显。这个清理流程我后来在V15、V16、V17好几台不同机器上验证过基本通用。实际碰到的情况里介不涉及重装系统就能解决的比例大概有九成。唯一有一次比较棘手的是在Windows Server 2016上装过带Reporting Services的完整SQL Server那个组件即便换了实例被卸载Windows服务注册还残留了一层Reporting Services的独立服务项需要单独删一遍。如果你在清理时也发现主实例删完了还有附加组件服务别慌按同样的sc delete思路逐个处理即可。
返回列表