不同activiti版本会生成不同张Activiti表,activiti7会生成28张表。其中都是以ACT_开头。
其中常用的是 ACT_HI 指的是历史表;ACT_RU指的是运行表;
ACT_HI_TASKINST | 历史任务表 | 存放每个节点的处置人,处置开始时间和结束时间,节点id,流程id,执行id等信息,我的待办的信息就是从这张表中获取信息的 |
ACT_HI_VARINST | 历史参数表 | 存放流程中的各种参数(如启动参数,表单参数等) |
ACT_HI_ACTINST | 历史行为表(历史节点表) | 存放流程中每个节点的信息(如startEvent,endEvent,并行网关,排他网关) |
最近有个需求,由于之前项目系统不够完善及集群模式屡屡出现问题,导致启动流程时会出现多个节点的问题,所以需要我清除脏数据,说白了,就是我的待办及已办任务中会出现同一个任务。
此时我这样解决的,直接对全部人员的待办和已办信息进行判断,判断是否已办中存在待办信息,待办存在重复多个,已办中存在重复多个 这三种情况,由于我直接删除节点的信息(ACT_HI_TASKINST表)并且未进行对删除数据进行备份,只是打印日志信息,还有就是对全部数据库信息进行备份,这样的解决办法,若出现问题,则不能及时恢复。
上面解决方案,存在两个问题,1.删除数据不可只是打印日志,需要对删除数据进行建一个临时表入库,这样若是生产环境万一丢失,则完犊子了。2.清除脏数据后,生产环境出现了有的人已办信息丢失,经过排查,是一个乌龙,客户未选中时间点,才导致的。但是项目经理还是让我开接口查看是否误删节点信息,若误删,则对数据进行补充。
经过两个小时的查看activiti这28张表,发现ACT_HI_ACTINST这张表存有数据的备份,只需要将此数据进行添加即可。当时想的是,若是此方法行不通,则只能对之前数据库进行恢复(但是这是万不得已才这样做,因为现在数据也在不断更新,并且当时数据量很大,每天最少是一万的数据量),然而在上线时,客户说数据只保留了近两周的数据,但是执行清除脏数据的是一个月之前,所以更加坚定第一个解决方案不能出错。
这是恢复历史任务表数据的SQL
INSERT INTO `ccb`.`act_hi_taskinst` (`ID_`, `PROC_DEF_ID_`, `TASK_DEF_KEY_`, `PROC_INST_ID_`, `EXECUTION_ID_`, `NAME_`, `PARENT_TASK_ID_`, `DESCRIPTION_`, `OWNER_`, &