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

本文记录了一次问题排查过程,涉及EQP_STATEVALUE表的数据重复,通过追踪发现EQP_PTYVAL表的脏数据导致设备状态自动更新时插入了多余数据。解决策略强调避免在PI运行期间操作设备属性,尤其是当设备被占用时。
摘要由CSDN通过智能技术生成

问题排查报告

原文来至

问题跟踪

在这里插入图片描述

首先定位到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占用,就会出现这个情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值