这里写目录标题

  • 1. 处理链中断后如何继续
  • 2. 子链removed from scheduling


1. 处理链中断后如何继续

首先有一个表:

RSPCPROCESSLOG 一看就知道这里面是process chain的log.

Process怎么判断已经close了_命令行


你这条处理链里面有好多个DTP,但是有个DTP出错了,那它这个状态就是R了。

如果这个链是必须得上面没错的跑完才执行,那这条链就会卡在这里。

自动repair后,链是会自己往下跑的。

但是如果你去手动修复,那之后怎么让这条链继续跑下去呢?

Process怎么判断已经close了_可执行_02


链是一个step一个step往下跑的。

在你处理链出错的那个DTP上右击message。

在Chain里面能看到Variant 和 Instance:

Process怎么判断已经close了_时间戳_03


去到log表里查询,能看到TYPE等等。

Process怎么判断已经close了_时间戳_04

手动修复完了之后,去跑这个FM :
RSPC_PROCESS_FINISH

把这条链的状态给改成G,让这条链能继续trigger底下的其他链。

Process怎么判断已经close了_Process怎么判断已经close了_05


总结一下,如果你手动修复了一个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了。

Process怎么判断已经close了_其他_06


这就能看到,DTP_OLAD就没执行起来。

为啥呢?正常的流程就是:

  1. remove from scheduling: 我也不知道为啥要remove先,但是它这是一整套流程
  2. 接下来就是出发了很多个DTP_LOAD的job
  3. 然后就是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一下应该就能解决了。吧。

Process怎么判断已经close了_时间戳_07


还是来查一下吧:

Process怎么判断已经close了_时间戳_08


Process怎么判断已经close了_其他_09


算了,不是这个:

看下下面这两个吧:

TBTCO - Job Status Overview Table

TBTCD - Job Log Directory

Process怎么判断已经close了_Process怎么判断已经close了_10

Process怎么判断已经close了_可执行_11


这咋这么多的?1296怎么来的?

0-9是10个数字,A-Z是26个字母。那就是36*36=1296啊

那就是说从00:05分11秒开始的所有ID都被用完了??这好像也说的过去。瞬间觉得说的有道理了。我看了一下,前后都占满了。那怎么删呢?

Process怎么判断已经close了_Process怎么判断已经close了_12


Process怎么判断已经close了_Process怎么判断已经close了_13


test 一下发现有这么多。勾掉test再来一次就删掉了。

Process怎么判断已经close了_Process怎么判断已经close了_14

Process怎么判断已经close了_Process怎么判断已经close了_15


然后就可以了。

或者呢,SM37去单个删你想删的。找到那个job,选中在命令行选job->delete.