SAP:“从共享内存删除”不起作用

时间:2019-01-23 15:54:12

标签: function sap batch-processing shared-memory abap

我正在通过作业更新我创建的共享存储器的值。 我正在初始化期间删除/释放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”中,我期望从共享内存中导入的“ var”在通过循环的第一次迭代时将没有值,因为我在“程序1”中对其进行了初始化。

我希望“共享内存”在第一次迭代后就可以包含数据。

从共享内存中删除期间是否有任何锁定注意事项,或者是否有多台服务器影响删除。请指教。非常感谢。

1 个答案:

答案 0 :(得分:3)

您的问题可以分为几个问题:

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

共享内存确实支持。

监视共享内存

有一种概述共享区域内存的标准方法(事务SHMM)。

在应用程序服务器之间共享内存

Matthew Billingham回答了类似的问题here

  

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

     

假设您有三个应用程序服务器-A,B和C。在SM59中为A创建目标。使用以下逻辑创建一个RFC来处理所需的共享对象:

     

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

     

如果功能模块在B或C上运行,请使用DESTINATION A调用功能模块。

     

哑光

我的评论:

  • 可能还有其他方法。
  • 可以使用相同的方式来编写共享内存。