文本详细阐述了由于数据库表空间不足等异常导致工作流后台事务未正常结束的多种原因场景及相应解决方案。包括处理已失败状态的后台事务、执行中但实际失败的后台事务、已接收、重新调度、等待中和已就绪等状态的后台事务,以及特殊情况下的修复流程方法。每种场景都提供了具体的操作步骤和SQL查询语句,确保流程能够恢复正常流转。
问题:数据库表空间不足等异常导致工作流后台事务未正常结束,流程流转卡住。
该问题对应的多种原因场景及解决方案具体阐述如下:
1.针对【已失败】状态的后台事务
1)、首先通过【后台事务监控】,标题类似WF,状态等于已失败,查询出异常的工作流后台事务。
2)、双击对应创建时间的已失败的后台事务,可看到错误信息,如对应“表空间不足”之类的报错即就是我们需要处理的后台事务
3)、选中2中已失败的后台事务-点击修复,修复成功,对应流程即恢复正常
(注:后台事务【修复】操作就是重新执行该条后台事务任务)
2.针对【执行中】的后台事务
1)、一样通过后台事务监控 过滤出 标题类似WF 状态为执行中的后台事务
2)、查询已办任务对应的流程实例(替换后台事务标题中的任务id)
SELECT FCODE FROM T_wfr_procinst where fprocinstid in(SELECT FPROCINSTID FROM T_WFR_ASSIGNDETAIL where FASSIGNID = 'd2576c57-3cd2-426c-a5af-2ea007fa3166WFWKITEM')
3)、工作流监控中 通过流程编码 查询流程实例,发现是对应问题流程
4)、需要对这些后台事务进行后台修改状态为失败
--查询并备份这些执行中,实际已经失败的后台事务(建议替换下面后台事务创建时间来保证查询范围精确)
--1.查询(查询分析器中执行的话,oracle日期格式为{ts'2023-10-08 00:00:00'})
如果oracle数据库:
SELECT * FROM T_job_inst where ftitle like '%WF%' and FSTATE = 'Running' and FCREATEDTIME >={ts'2023-10-08 00:00:00'} and FCREATEDTIME <{ts'2023-10-09 00:00:00'};
如果是sql server 数据库:
SELECT * FROM T_job_inst where ftitle like '%WF%' and FSTATE = 'Running' and FCREATEDTIME >='2023-10-08 00:00:00' and FCREATEDTIME <'2023-10-09 00:00:00';
--2.备份数据到表T_job_inst_bk231009(该表名可自定义)
如果oracle数据库:
SELECT * into T_job_inst_bk231009 FROM T_job_inst where ftitle like '%WF%' and FSTATE = 'Running' and FCREATEDTIME >={ts'2023-10-08 00:00:00'} and FCREATEDTIME <{ts'2023-10-09 00:00:00'};
如果是sql server 数据库:
SELECT * into T_job_inst_bk231009 FROM T_job_inst where ftitle like '%WF%' and FSTATE = 'Running' and FCREATEDTIME >='2023-10-08 00:00:00' and FCREATEDTIME <'2023-10-09 00:00:00';
--3.修改状态为失败
UPDATE T_job_inst SET FSTATE = 'Failed' WHERE FJOBINSTID in (SELECT FJOBINSTID FROM T_job_inst_bk231009);
5)、 在后台事务监控中过滤 已失败的 后台事务,注意对比是之前那几个执行中 的,确认 就批量选中,点修复。
修复成功之后会刷新列表,再没有数据代表后台事务重新执行成功,此时再去看对应流程是否正常。
流程打开刷新之后流转正常了
3. 针对【已接收】【重新调度】【等待中】【已就绪】状态的后台事务
如果上述1,2场景都已经处理掉了,还有存在没有往下流转的流程,那么很可能就是这第3种情况。
1)、首先我们可以通过流程实例id来查询其对于的未结束的后台事务(替换参数为流程实例id)
SELECT * FROM T_job_inst WHERE FJOBINSTID = '32dc3925-ea12-42cd-bf39-563ae4553e45WFPCINST'
注:流程实例id不知道怎么查?可通过流程实例编码来查询:
select fprocinstid from t_wfr_procinst where fcode = '替换流程实例编码';
2)、如果1)中查到了,那么可以通过标题ftitle字段到后台事务监控中 过滤出来,前台看的更清楚,如下图是已就绪状态的工作流后台事务未执行导致。
3)、这种场景很简单,我们选中该后台事务点 【挂起】,然后再点【唤醒】即可解决。
如果存在大批量该类状态后台事务导致,也可以通过状态和计划时间过滤出来,然后批量选中 点【挂起】,然后再点【唤醒】解决。
4.如果已经没有需要处理的后台事务了,仍然还存在个别流程没有往下流转,那这种情况只能通过特殊修复-跳转前修复,然后再打开流程跳转到想要的节点来处理。
特殊修复:EAS客户端登录administrator-工作流监控-查到该流程,点特殊修复-跳转前修复,确定。
推荐阅读