问题排查报告
问题跟踪
##
执行语句取出所有非重复数据:
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_STATEVALUE
和EQP_TRANVALUE
插入了数据
如何避免
在PI运行的时候切勿去操作设备类或修改属性,如果这个设备正在被PI占用,就会出现这个情况。