SAP: «Удалить из общей памяти» не работает - PullRequest
0 голосов
/ 23 января 2019

Я обновляю значение созданной SHARED MEMORY через JOB.Я удаляю / освобождаю 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» IMPORTED из SHARED MEMORY не будет иметь значения, когда он пройдет первую итерацию моего цикла, так как я инициализировал его в «программе 1».

Я ожидаюОБЩАЯ ПАМЯТЬ, чтобы иметь данные после первой итерации.

Есть ли какие-либо соображения по блокировке при удалении из общей памяти или несколько серверов влияют на удаление.Пожалуйста, порекомендуйте.Большое вам спасибо.

1 Ответ

0 голосов
/ 24 января 2019

Ваш вопрос можно разделить на несколько вопросов:

Совместное использование памяти несколькими пользователями и сессиями

Он действительно поддерживается совместно используемой памятью.

Мониторинг общей памяти

Существует стандартный способ просмотра общей памяти (транзакция SHMM ).

Совместное использование памяти между приложениямисерверы

Мэтью Биллингем ответил на аналогичный вопрос здесь :

Единственным способом, кроме использования базы данных, является использование одного из серверов приложений.сохранить данные и разрешить доступ с других серверов приложений.

Допустим, у вас есть три сервера приложений - A, B и C. Создайте пункт назначения для A в SM59.Создайте RFC для обработки требуемых общих объектов, используя следующую логику:

Если функциональный модуль работает на сервере приложений A - вернуть значение общего объекта.

ЕслиФункциональный модуль работает на B или C - вызовите функциональный модуль с DESTINATION A.

matt

Мои комментарии:

  • Возможно, есть другиеспособы.
  • Запись общей памяти может быть выполнена таким же образом.
...