1. 处理链中断后如何继续
首先有一个表:
RSPCPROCESSLOG 一看就知道这里面是process chain的log.
你这条处理链里面有好多个DTP,但是有个DTP出错了,那它这个状态就是R了。
如果这个链是必须得上面没错的跑完才执行,那这条链就会卡在这里。
自动repair后,链是会自己往下跑的。
但是如果你去手动修复,那之后怎么让这条链继续跑下去呢?
链是一个step一个step往下跑的。
在你处理链出错的那个DTP上右击message。
在Chain里面能看到Variant 和 Instance:
去到log表里查询,能看到TYPE等等。
手动修复完了之后,去跑这个FM :
RSPC_PROCESS_FINISH
把这条链的状态给改成G,让这条链能继续trigger底下的其他链。
总结一下,如果你手动修复了一个DTP,那为了让这条链从这个DTP再往下跑,就用上面这个FM。
(这个是对于下面的DTP会等上面这个正确跑完后执行的情况)
这个我也是今天才完全理解透。
我们的是里面的子链DTP是正确的才能继续。
但是外面的主链作为大链的子链无论正确与否都跑。
我以前就是直接repair里面的DTP,或者是手动修复然后skip这个DTP。那么当然里面的所有的没跑完的DTP会继续往下跑。
但是问题还有,等所有这条子链的DTP跑完了,它会继续出来触发它下面的子链。
然而它下面的子链是已经被触发过的,因为它的触发条件是无论正确与否。
这就导致了,原先DTP出错的链,状态是错的,里面还有好多DTP没有跑。
但是它外面的下面的链,就算上面的链错了,它也已经跑了。
这时,如果我去修复或者跳过上面的链里面错误的DTP,就会导致这条链被再次执行,然后再触发一遍下面的链。
但是我如果去FM去改状态,那么我只改了子链里面的一个DTP的状态,整条链的状态我还是没有改的。它还是以前的错误的状态,也不会继续触发一个新的。
不过这个还是得下次实时的去看,如果我修复,那么RSPCPROCESSLOG里面会是什么样。
2. 子链removed from scheduling
问题出在哪里?
当链执行的时候,后台有个job BI_PROCESS_CHAIN开始。
然后进到这条链里去了。这条链里有很多的DTP,接下来就是执行job BI_PROCESS_DTP_LOAD了。
这就能看到,DTP_OLAD就没执行起来。
为啥呢?正常的流程就是:
- remove from scheduling: 我也不知道为啥要remove先,但是它这是一整套流程
- 接下来就是出发了很多个DTP_LOAD的job
- 然后就是activate and schedule 这个chain,和第一步形成完整流程。等下次再跑就是还是被主链触发。
那问题就在于,为什么底下的DTP_LOAD的这些job没有被触发起来?
难道当时后台没有可执行的进程了?
这个也不是说子链里面的DTP执行出错了,是它压根链子链都没启动起来,连个log都没有。
一般的情况就是,这个处理链是没人改的。
但是可能里面的DTP由于改了转换,然后不激活了。这些在表RSTRAN和RSBKDTP里看对应的OBJSTAT就行。是不是INA
有可能是转换的A和M版本不一致?
那这时候咋办?修复不一致的A和M版本: SE38 RSTRAN_ROUT_RSFO_CHECK
激活M的转换和DTP:RSDG_TRFN_ACTIVATE
然后把问题处理链remove from schedule, 再reschedule一下。这就解决问题了。
但是如果不是以上问题。我还看到一种解释。
对这个历史悠久的解释,我持怀疑态度。
但是又好像有几分道理,待验证。
说法是,由于每个后台JOB都有一个ID。这个ID它是时间戳和两个数字 00 - 99
只有时间被计入ID,日期是不计的。
如果你有个每天固定时间点周期运行的处理链,那后台job可能会占满同一时间点的00-99
时间长了都占满了,那就没办法生成新的job了。
那就得让basis去定期删除已完成的后台job ID 。
我截个图就发现根本不是说的这样,都有Z了,说明是字符也有的。那就可能是00-00和AA-ZZ? 没空去查了,以后再查验吧。
不过reschedule一下应该就能解决了。吧。
还是来查一下吧:
算了,不是这个:
看下下面这两个吧:
TBTCO - Job Status Overview Table
TBTCD - Job Log Directory
这咋这么多的?1296怎么来的?
0-9是10个数字,A-Z是26个字母。那就是36*36=1296啊
那就是说从00:05分11秒开始的所有ID都被用完了??这好像也说的过去。瞬间觉得说的有道理了。我看了一下,前后都占满了。那怎么删呢?
test 一下发现有这么多。勾掉test再来一次就删掉了。
然后就可以了。
或者呢,SM37去单个删你想删的。找到那个job,选中在命令行选job->delete.