解决西门子ebr设备模块更新报错,EQP_STATEVALUE more than one row

问题排查报告

原文来至

问题跟踪

在这里插入图片描述

首先定位到EQP_STATEVALUE表,发现数据出现重复:

在这里插入图片描述

执行语句取出所有非重复数据:

select t.stateid,t.fk_statelistcst,t.code,t.label,t.functionid,t.pk_id,
       t.dlu,
       t.dluunit,
       t.cpt,
       t.haseqpimpact from EQP_STATEVALUE t group by t.stateid,
       t.fk_statelistcst,
       t.code,
       t.label,
       t.functionid,
       t.pk_id,
       t.dlu,
       t.dluunit,
       t.cpt,
       t.haseqpimpact

然后删除并还原,本以为应该就好了,发现一会数据又上来了,说明脏数据不只是这个,停掉服务继续排查

在设备管理点修改设备,发现弹出下面的报错:

在这里插入图片描述

根据提示,找到该Function:

在这里插入图片描述

发现该函数第30行有个PK_ID=… 这里报错,说明后面的语句查询到的值不止一个!

对数据追踪:

SELECT EQP_PTYVAL.FK_PROPERTYTYPE, EQP_PTYVAL.ENTITYID, EQP_PTYVAL.ENTITYCSTID 
FROM EQP_PTYVAL
 WHERE FK_CLASSID = 1016 AND FK_PROPERTYID = 730

继续追:

发现这个重复了,备份并删除!

本以为好了,点击更新出现如下报错:

在这里插入图片描述

然后根据提示,排查Eqp_Eqpexe_Statustransmgt这个表,发现并没有什么重复数据,崩溃!!!!

只能一个个表去排查,最终发现EQP_TRANVALUE下面数据有异常!
按照上面的去重方法,把在这里插入图片描述
这里数据去除重复,在去更新:
在这里插入图片描述

完美!!!

总结

  • EQP_PTYVAL表有一个脏数据,导致服务在自动更新设备状态的时候重复的向``EQP_STATEVALUEEQP_TRANVALUE插入了数据

如何避免

在PI运行的时候切勿去操作设备类或修改属性,如果这个设备正在被PI占用,就会出现这个情况。
EQP_TRANVALUE`插入了数据

如何避免

在PI运行的时候切勿去操作设备类或修改属性,如果这个设备正在被PI占用,就会出现这个情况。


版权声明:本文为qq_38833897原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。