我正在通过作业更新我创建的共享存储器的值。 我正在初始化期间删除/释放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”中对其进行了初始化。
我希望“共享内存”在第一次迭代后就可以包含数据。
从共享内存中删除期间是否有任何锁定注意事项,或者是否有多台服务器影响删除。请指教。非常感谢。
答案 0 :(得分:3)
您的问题可以分为几个问题:
在多个用户和会话之间共享内存
共享内存确实支持。
监视共享内存
有一种概述共享区域内存的标准方法(事务SHMM)。
在应用程序服务器之间共享内存
Matthew Billingham回答了类似的问题here:
除了使用数据库之外,唯一的方法是使用其中一个应用程序服务器来存储数据,并允许来自其他应用程序服务器的访问。
假设您有三个应用程序服务器-A,B和C。在SM59中为A创建目标。使用以下逻辑创建一个RFC来处理所需的共享对象:
如果功能模块在应用服务器A上运行-返回共享对象的值。
如果功能模块在B或C上运行,请使用DESTINATION A调用功能模块。
哑光
我的评论: