当通过后台作业运行时,从共享内存中删除失败。

问题描述 投票:3回答:1

我正在通过JOB更新我所创建的SHARED MEMORY的值,在初始化过程中,我删除了SHARED MEMORY,但似乎没有删除SHARED MEMORY上的内容,因为我仍然能够从SHARED MEMORY中导入数据。我在初始化过程中删除了共享内存,但似乎并没有删除共享内存中的内容,因为在下面循环的第一次迭代中,我仍然能够从共享内存中导入数据。

我已经尝试研究并发现了一些关于共享内存的事实,比如,共享内存可以被多个用户和会话访问。我也怀疑是应用服务器的不同,也想到了后台运行时用户名的改变可能会影响 "删除"--但仍然不能解决我的问题,因为我无法在调试时观察行为。

 "Program 1: Run via job
 DELETE FROM SHARED MEMORY vari(tl) ID 'MY' && sy-uname.

 DO 3 TIMES.
    SUBMIT program 2 WITH xxx VIA JOB AND RETURN.
 ENDDO.

 "Program 2: Run via Job
 START-OF-SELECTION.

 IF sy-calld EQ 'X'.
    IMPORT var TO var FROM SHARED MEMORY vari(tl) ID 'MY' && sy-uname.
 ENDIF.

 IF var IS INITIAL.
    SELECT fld1, fld2, fld3
      FROM table
      INTO TABLE var
      WHERE cond EQ value.

    IF sy-called EQ 'X'.
       EXPORT var FROM var TO SHARED MEMORY vari(tl) ID 'MY' && sy-uname.
       lt_var = var.
    ENDIF.

 ENDIF.

 IF lt_var IS INITIAL.
    "Raise error.
 ELSE.
    "Further processing...
 ENDIF.

在上面的 "程序2 "中,由于我在 "程序1 "中初始化了从SHARED MEMORY导入的 "var",我希望它在通过循环的第一次迭代时不会有值。

我希望SHARED MEMORY在第一次迭代后有数据。

在从共享内存中删除的过程中是否有锁定的考虑,或者多个服务器是否会影响删除。请赐教。非常感谢您。

sap batch-processing shared-memory abap
1个回答
3
投票

你的问题可以分为几个问题。

多个用户和会话之间共享内存

确实是支持共享内存的。

监控共享内存

有一种标准的方式来概述共享区域内存(事务性的 SHMM).

应用服务器之间共享内存

马修-比林厄姆回答了一个类似的问题。此处:

除了使用数据库外,唯一的方法是使用其中一个应用服务器来存储数据,并允许从其他应用服务器访问。

假设你有三台应用服务器--A、B和C,在SM59中为A创建一个目标。创建一个RFC来处理你想要的共享对象,逻辑是这样的。

如果函数模块运行在应用服务器A上 - 返回共享对象的值。

如果函数模块运行在B或C上--调用函数模块,目的地为A。

亚光

我的意见。

  • 可能还有其他方法。
  • 写共享内存也可以用同样的方法。
© www.soinside.com 2019 - 2024. All rights reserved.