ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WinCC启动卡在10%?SQL Server数据库连接故障排查指南

WinCC启动卡在10%?SQL Server数据库连接故障排查指南 做WINCC项目的兄弟早晚会遇到这个画面项目启动窗口弹出来进度条慢吞吞爬到10%然后就像焊死了一样底下冒出一行“初始化数据库连接……无法加载”或者类似的幺蛾子提示。有的人以为电脑卡了等十分钟还是那样有的人干脆重装系统结果装完三天后同样的问题换个姿势又来了。我为什么敢说“换个姿势又来了”因为这条报错十有八九不是WINCC本身坏了而是它背后的数据库也就是Microsoft SQL Server没伺候好。这个问题在西门子WinCC V7.x、V8.x系列里都极其常见属于典型的环境类故障。这篇文章我会按自己的排障习惯从“到底卡在哪”开始一层层往下剥SQL Server服务、实例版本、项目数据库、登录权限、网络协议和防火墙最后再配几个我实际处理过的案例。常年在项目现场跑的朋友可以直接跳到第2节按清单抄刚入门的新手也别慌每一步我都会写到“下一步点哪里”的程度。1. 卡在10%到底卡在哪先看WINCC的启动链路1.1 初始化进度条里的“10%”在做什么WINCC启动一个项目时表面上看就是进度条往前跑但背后其实是一串紧密咬合的流程读取项目文件、解析画面和变量、建立数据库连接、加载组态信息、启动运行系统、加载通信驱动。这个顺序是固定的而“建立数据库连接”基本就落在初始化进度的大约10%位置。有点抽象咱们换个方式理解。你可以把WINCC项目想成一个工厂的生产车间SQL Server就是仓库管理员。生产线启动前车间主任必须先和管理员对一下物料编号和库存数——这个“对账”的动作放到软件里就是数据库连接初始化。要是管理员没上班或者账本锁在柜子里拿不出来那车间主任只能干等着。WINCC也是一样数据库连不上后续的变量归档、报警记录、画面数据全部无法加载进度条自然就停在10%不动了。注意这里有个关键点WINCC并不是立刻报错。数据库连接有超时机制通常是多次重试、每次十几秒再加上WINCC自身的等待逻辑外表看起来就是“卡死”。很多第一次遇到的人会错误地结束进程甚至直接断电重启反而把SQL Server的启动顺序弄乱给后续排查增加麻烦。1.2 为什么偏偏数据库这一环容易出事原因其实很简单WINCC不像普通办公软件那样只依赖几个DLL。它依赖的是一个完整的数据库服务而这个服务又被Windows底层的各种环境因素管着服务是否启动、启动类型是否为自动、登录账户是否有权限、TCP/IP协议是否启用、防火墙是否放行、SQL Server版本是否和WINCC匹配、系统更新有没有改系统服务配置……随便哪一环出问题SQL Server都可能无法对外提供正常连接。再加上很多工控现场的电脑常年不维护、杀毒软件乱拦截、系统补丁乱打数据库这一环出事的概率远远高于WINCC的其他模块。所以当你看到“初始化数据库连接”卡住时第一反应不应该是“WINCC坏了”而应该是“SQL Server没伺候好”。方向一旦对排查速度能快一半以上。2. 第一梯队排查把SQL Server服务状态搞清楚2.1 30秒定位SQL服务状态先做最简单、命中率也最高的一步看服务有没有起来。按 WinR 打开运行窗口输入 services.msc 回车在服务列表里找以SQL Server开头的服务。WINCC安装时会给SQL Server起一个专门的实例名服务显示名一般是“SQL Server (WINCCV7.4)”“SQL Server (WINCCV7.5)”这样服务名则是MSSQL$WINCCV7.4、MSSQL$WINCCV7.5这种格式。看到这个服务后第一看“状态”是不是“正在运行”第二看“启动类型”是不是“自动”。如果状态是“已停止”右键选择“启动”再把启动类型改成“自动”。启动类型这东西特别坑有些GHOST系统或精简版系统会把第三方服务的启动类型改成“手动”SQL Server跟着遭殃每次开机都不会自动启动而你开机后直接双击WINCC项目自然就卡在数据库连接那一步。嫌鼠标点来点去麻烦也可以用命令行。以管理员身份打开CMD执行net start | findstr MSSQL这条命令会列出所有以MSSQL开头的服务。看不到任何输出说明SQL服务根本没起来看到“MSSQL$WINCCV7.5”之类的名字再执行net start MSSQL$WINCCV7.5服务名按你自己电脑上的实例名替换。执行成功后再回到WINCC试一次启动。这一步能解决相当一部分问题尤其是刚装完系统、还没来得及设置服务启动类型的机器。2.2 服务能启动但连接异常怎么办如果你不幸属于“服务明明起来了WINCC还是卡在10%”的那批人下一步就要检查SQL Server本身能不能连。最简单的办法是用SQL Server Management StudioSSMS连一下这个实例。SSMS不一定是WINCC自带的但很多项目电脑上会装。如果没装可以直接从微软官网下载一个或者先用命令行工具sqlcmd凑合测试sqlcmd -S .\WINCCV7.5 -E-E表示使用Windows身份验证登录实例名要和你电脑上的一致。能进入1这样的提示符说明SQL Server能接受连接问题多半出在WINCC项目配置或权限上连不进去会看到明确的错误码和信息比如“无法连接到服务器”“登录超时已过期”等。如果SSMS也连不上优先看SQL Server自己的错误日志。默认位置一般在安装目录下比如SQL Server 2019的路径是C:\Program Files\Microsoft SQL Server\MSSQL15.WINCCV7.5\MSSQL\Log\ERRORLOG用记事本打开最新的ERRORLOG文件滚动到底部。常见几种情况日志里反复出现“Login failed for user xxx”说明是权限或密码问题出现“Could not open database xxx”说明项目数据库文件打不开而一大片空白、没有明显的错误输出那基本就是SQL Server服务根本没起来过第2.1节的方法重新来一遍。2.3 WINCC版本和SQL Server版本匹配别搞错服务能连、日志也不报错WINCC还是卡在10%这时候要抬头看一个很多人忽略的问题版本匹配。WINCC安装时会自动装对应版本的SQL Server两者是绑定关系。但现实里总有人因为各种原因手动重装SQL Server或者用Ghost镜像恢复系统后补装了错误的SQL版本导致WINCC拿新版或旧版的库文件去连根本不兼容的实例。常见的对应关系大致如下具体以西门子官方安装文档为准WINCC版本常见配套SQL Server版本WINCC V7.2SQL Server 2008 R2WINCC V7.4SQL Server 2016WINCC V7.5SQL Server 2019WINCC V8.0以安装向导提示为准怎么快速看自己SQL Server的版本在SSMS里执行SELECT VERSION;然后跟WINCC安装说明对照一下。版本不匹配的情况说句扎心的实话光靠改配置很难彻底解决建议卸载SQL Server后重新用WINCC安装程序修复或者干脆在相同操作系统环境下重装。重装前一定先把项目数据库文件备份出来不然真到后续修复数据库那一步你会想撞墙。3. 第二梯队排查项目数据库、权限与网络协议3.1 项目数据库到底存在哪怎么判断好坏服务没问题、版本也对得上接下来要看项目数据库本身。WINCC项目不只是你看到的那一堆文件夹它还在SQL Server里建了对应的数据库用来存放画面组态、变量记录、报警和归档数据。数据文件通常以.mdf为主、.ldf为日志文件可能在项目文件夹下也可能在SQL Server的数据目录下具体位置取决于项目创建时的配置。在SSMS里连上实例后展开“数据库”节点找到你项目对应的数据库名称。右键查看“属性”或者直接执行SELECT name, state_desc FROM sys.databases;重点看state_desc如果是ONLINE且没有可疑状态SUSPECT基本正常。如果是RECOVERY_PENDING、SUSPECT、OFFLINE这类状态那数据库已经处于不健康状态WINCC自然连不上。遇到数据库文件损坏的修复办法是先用SQL Server单用户模式接管数据库再做完整性检查。操作分几步ALTER DATABASE 你的数据库名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DBCC CHECKDB (你的数据库名, REPAIR_ALLOW_DATA_LOSS); GO ALTER DATABASE 你的数据库名 SET MULTI_USER; GO必须泼一盆冷水REPAIR_ALLOW_DATA_LOSS这个选项虽然在很多博客里被当成“修复神器”但它意味着允许丢失部分损坏数据。生产项目的数据库操作前一定要先备份原始 .mdf 和 .ldf 文件。别指着DMZ里的复制文件当备份我见过不止一次复制出来的.mdf是零字节的惨案。3.2 登录权限和账户问题为什么同一个电脑别人能开你不能开服务是好的数据库也是好的但当前Windows用户连不上SQL Server这也会导致WINCC在那干等。这属于权限问题通常分为两类。第一类是SQL Server登录名问题。WINCC安装时会把当前系统用户或特定服务账户加入SQL Server登录列表。如果之后你用另一个Windows账户登录电脑而这个新账户没有对应的SQL Server登录名WINCC自然连不上数据库。解决办法是在SSMS里手动添加登录名CREATE LOGIN [计算机名\Windows用户名] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [计算机名\Windows用户名];第二类是UAC权限问题。WINCC是工控软件最典型的毛病就是普通双击图标启动时权限不够数据库连接被系统拦截但你又看不到明确报错。所以无论服务、数据库全都没问题我仍然建议右键WINCC启动图标选择“以管理员身份运行”。如果这样可以正常启动项目那就是UAC权限的锅可以右键快捷方式→属性→兼容性→勾选“以管理员身份运行此程序”一劳永逸。顺带提醒一句有些朋友喜欢在域环境或共享账号下操作工控机组策略可能限制“作为服务登录”的权利这样SQL Server服务账户即便配置正确也可能无法登录系统。遇到这种环境别硬刚让IT把服务账户加进本地策略里。3.3 TCP/IP协议、端口和防火墙陷阱还有一种“看起来什么都正常实际就是连不上”的诡异情况出在SQL Server的网络协议和防火墙。SQL Server默认情况下TCP/IP协议可能是禁用的尤其是某些精简安装或非默认配置。打开“SQL Server配置管理器”开始菜单里可以搜它对应的文件名因版本而异比如SQLServerManager15.msc对应SQL Server 2019在“SQL Server网络配置”→“实例名的协议”里把TCP/IP协议设为“已启用”然后重启SQL服务。很多人在这一步成功后会再次踩坑TCP/IP启用了但SQL Server监听的不一定是默认端口1433。有时候系统里有多个SQL实例或者之前手动改过端口就会让SQL Server监听其他端口。WINCC项目配置里的连接端口如果不一致一样连不上。排查监听端口可以在配置管理器的“TCP/IP属性”→“IP地址”标签里查看。如果有多个IP要滚动到“IPAll”部分看“TCP动态端口”和“TCP端口”这两个值。一般情况下保持1433即可。改完端口必须重启SQL服务。另外Windows防火墙如果拦了SQL Server的入站连接同一台电脑上WINCC连接SQL Server其实走的是本地回环localhost防火墙对回环流量一般不拦但如果你的项目配置里写的是机器名或IP地址连接会走TCP协议栈这时候防火墙就可能拦下来。稳妥起见在现场机器的防火墙入站规则里放行TCP 1433和UDP 1434SQL Browser服务的端口是比较省心的做法。4. 真实排障案例三次卡在10%的处理过程4.1 案例一SQL服务被禁用了两分钟恢复某化工厂中控室的上位机操作员反映WINCC启动卡在10%持续了好几天之前一直用“反复重启电脑”的土办法偶尔能进但越来越难。我到现场后第一件事就是打开services.msc结果看到SQL Server (WINCCV7.4)这个服务状态是“已停止”而且启动类型是“手动”。当时我判断就是它了。右键启动服务再把它改回“自动”。然后又等了两分钟因为SQL Server冷启动需要时间WINCC项目直接双击打开进度条一路顺畅跑完。全程不到五分钟。这种问题之所以会“偶尔能进”是因为电脑重启后自动启动的服务多了SQL Server有时也能被带起来但启动顺序一错或者资源竞争就卡住了。后来我在工控机上给SQL服务设置了延迟启动或者直接设为自动这类问题基本绝迹。4.2 案例二数据库文件损坏惊险找回某新能源车企的测试台架WINCC项目启动一直卡在10%系统报“无法加载数据库”。单独看SQL服务正常SSMS能连上但项目数据库显示SUSPECT状态。我先用文件管理器把项目目录下对应的 .mdf 和 .ldf 文件复制了一份备份然后用第3.1节的DBCC CHECKDB命令尝试修复。第一次跑REPAIR_FAST模式没用又跑REPAIR_REBUILD部分索引恢复了最后没办法用了REPAIR_ALLOW_DATA_LOSS好在项目本身归档数据不重丢掉了一点历史报警记录但核心变量和画面组态都保住了。修复完成后把数据库状态改回MULTI_USERWINCC重新启动成功。这里最想提醒大家的是看到SUSPECT别慌着删库重建先备份、再修复、最后重建顺序不能乱。而且WINCC项目文件里还藏着不少组态数据数据库能修优先修实在修不了才考虑重建数据库并做项目管理器恢复。4.3 案例三杀毒软件拦截导致端口不通还有一次在制药车间的服务器上SQL服务正常、SSMS从本机连接也正常但WINCC就是卡在10%。我用sqlcmd测试连接发现本机连接项目数据库完全没有问题但WINCC使用的连接方式似乎是按IP而不是localhost。后来发现这台机器装了某国产杀毒软件默认把SQL Server的TCP 1433入站连接给拦了。当时WINCC项目配置里指向的是IP地址防火墙规则一拦同一个网段的客户端连不上本机的回环连接却放行于是出现了“数据库看着正常WINCC就是跑不起来”的怪象。处理方式是把WINCC安装目录、项目目录、SQL Server安装目录全部加入杀毒软件白名单再在防火墙规则里显式放行TCP 1433。重试后WINCC顺利启动。自那以后我在部署上位机的第一件事就是把杀毒软件排除项配好而不是等出问题了再排查。5. 修好了也别大意日常防复发措施5.1 安装部署阶段的几条纪律体验过开机就卡10%的痛之后我总结了几条部署纪律每一条都是踩过坑换来的。第一WINCC安装完成后立刻把SQL Server服务启动类型改为“自动”并确认实例服务能正常启动。第二项目创建完成后马上用SSMS确认项目数据库是ONLINE状态别等用到时才后悔。第三工控机尽量用独立账户管理员账户要固定不要随意切换系统账户避免登录权限对不上。第四把所有关键目录加入杀毒软件白名单。第五安装WINCC补丁或系统补丁前先看官方兼容性说明别上来就“最新即正义”。这些细节看起来不起眼但组合在一起能把初始化卡住的概率降低九成以上。5.2 项目备份与数据库备份的正确姿势WINCC项目备份和普通文件复制不是一个概念。很多人直接拷贝整个项目文件夹当备份这有个隐患如果SQL Server里的数据库没有同步备份或者拷贝时机不对文件夹里的.mdf可能是旧的或不完整的。正确的备份策略应该是两条腿走路。一是用WINCC自带的“项目复制”工具导出项目文件它能连同组态一起打包恢复时比较省心。二是用SQL Server的备份功能定周期执行BACKUP DATABASE 你的数据库名 TO DISK D:\Backup\你的数据库名.bak WITH INIT;有条件的可以用Windows任务计划程序配合sqlcmd定时跑。很多人赶时间只做文件拷贝结果数据库和项目文件版本不一致恢复完启动照样卡。备份这事宁可多花点时间也别把现场数据赌在运气上。5.3 升级补丁与系统环境维护工控机最怕频繁升级但完全不升级也不行。我见过的卡10%问题里有一类就是Windows更新把.NET Framework或系统服务配置改了导致SQL Server无法正常运行。所以补丁管理要有节制生产机器尽量只装必要的安全更新避免装基于体验的新功能WINCC相关补丁要装西门子官方发布并经过验证的版本。另外要留意项目电脑的磁盘空间。SQL Server的日志文件默认会增长项目数据库的 .ldf 如果不定期收缩磁盘满了以后数据库会自动进入只读或异常状态WINCC随之卡在初始化。定时清理归档、定期收缩日志都是值得纳入日常巡检的活。最后再分享一个我个人的小习惯每次启动WINCC前先运行一条命令确认SQL服务活着net start | findstr MSSQL看不到输出就先启动服务再开项目。虽然听起来很土但确实帮我省了很多“开机等半天结果卡10%”的尴尬时间。
返回列表