[ABAP] 防止SAP JOB并发执行的检查

最近遇到一次系统卡顿,经检查原因是一个每五分钟执行一次的JOB并发执行导致的。

思考通过记录程序执行时间,定期关闭程序的方法解决问题,由于程序未执行结束的原因是因为接口阻塞导致的,所以无法在SAP端获取执行时间,故无法解决问题。

后来思考通过 JOB程序内包装触发另一个JOB的方式解决,在触发JOB前检查之前JOB执行的状态,如果是正在执行的状态则调用JOB_CLOSE关闭前一个JOB执行新的JOB保证不会并发执行造成卡滞。

最后经同事提醒找到资料系统表TBTCP / TBTCO会记录JOB执行状态,调用函数:

GET_JOB_RUNTIME_INFO 获取当前执行的JOB名称&JOB编号,

通过取表数据判断是否存在并行JOB就可以解决问题了。

分包检查函数代码如下,考虑以后在可能发生并发情况的JOB程序前调用此检查,欢迎指正:

FUNCTION zjob_check.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     REFERENCE(EX_FLG) TYPE  CHAR1
*"     REFERENCE(EX_MESSAGE) TYPE  CHAR255
*"----------------------------------------------------------------------
----------------------检查JOB并发执行------------------------------------
  DATA: lv_jobname  TYPE tbtcm-jobname,
        lv_jobcount TYPE tbtcm-jobcount.
  CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
    IMPORTING
      jobname         = lv_jobname
      jobcount        = lv_jobcount
    EXCEPTIONS
      no_runtime_info = 1
      OTHERS          = 2.
  IF sy-subrc <> 0.
  ELSE.
    SELECT SINGLE * FROM tbtco INTO @DATA(ls_tbtco)
      WHERE jobname = @lv_jobname AND status EQ 'R'
        AND sdlstrtdt = @sy-datum AND jobcount NE @lv_jobcount.
    IF sy-subrc = 0.
      ex_flg = 'X'.
      ex_message = ls_tbtco-sdlstrttm && '开始执行的同名JOB尚未执行完毕,本次执行取消!'.
    ENDIF.
  ENDIF.

ENDFUNCTION.

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值