9 сентября 2019 г.

Блокировка объектов SAP репозитория в транспортных запросах

При внедрении своих систем компания SAP рекомендует использовать трёхсистемный ландшафт, в который обычно объединены:
  • система разработки и настройки (DEV),
  • система тестирования или контроля качества (QAS),
  • продуктивная система или система промышленной эксплуатации (PRD).

Разработка новых решений и корректировки ошибок выполняются в первой системе. В тестовой системе производится тестирование изменений на продуктивном объеме данных. И в итоге, протестированное решение переносится в систему промышленной эксплуатации, где с ним сталкиваются конечные пользователи. Все эти системы объединяются в единый ландшафт с помощью транспортный системы, а изменения переносятся между системами с помощью транспортных запросов. Обо всём этом можно прочитать в этом или этом постах.

Родоначальницей транспортных запросов в ландшафте является система разработки и настройки. Когда разработчик изменяет или создаёт новый объект SAP репозитория (например, программу или функциональный модуль), то для объекта автоматически создаётся транспортный запрос с типом "запрос инструментальных средств" (Worbench request). Так как разработчиков, работающих в системе, обычно больше одного, то для сохранения целостности и безопасности необходим механизм, гарантирующий, что с одним объектом репозиториия одновременно может работать только один разработчик. И до тех пор, пока он не закончит разработку-изменение и не деблокирует запрос (released), объекты привязанные к запросу будут не доступны для изменения со стороны других разработчиков. 

На уровне SAP системы (сервера приложений ABAP) этот механизм реализован с помощью двух таблиц:
  • E071 - хранит записи всех объектов в запросах/задачах,
  • TLOCK - таблица блокировок объектов в открытых запросах.

Таким образом, пока запрос открыт, его объекты должны присутствовать в таблице TLOCK. При попытке других разработчиков (отличных от владельца запроса)  внести изменения в объект репозитория, система проверяет записи в таблице TLOCK. Если запись с объектом есть, то разработчик получает отказ на изменение объекта.

В посте "Использование транзакции SE03 для поиска запросов/задач" (рис. 7) я описывал возможность снять блокировку с объекта транспортного запроса. При использовании этой функции как раз и происходит удаление соответствующей строки из таблицы TLOCK.

Стоит отметить, что при нормальном функционировании транспортной системы записи таблицы с блокировками удаляются при деблокировании запроса. Так как в этот момент текущая версия объекта экспортируется в физические файлы транспортного запроса и возможна разработка новой версии.

Иногда в работе данного механизма SAP системы происходит сбой. В результате чего объект SAP репозитория может быть блокирован ошибочно (остались строки в таблице TLOCK) или не блокирован вовсе (нет записей в таблице TLOCK). Второе возможно при использовании вышеуказанного функционала транзакции SE03.

Для отслеживания соответствия объектов в транспортных запросах и их блокировок в SAP системе существует ABAP-программа RDDIT049. У программы нет привязанной транзакции, поэтому запуск осуществляется через транзакцию SE38 (рис. 1).

Рис. 1. Запуск программы RDDIT049.

На начальном экране программы необходимо галочками выбрать необходимые проверки и нажать на панели кнопку "Выполнить" (F8) (рис. 2).

Рис. 2. Запуск проверок блокировок в транспортных запросах.

Первая проверка проверяет все ли блокировки в таблице TLOCK принадлежат открытым запросам. А вторая часть - проверяет все ли блокировки корректны. Результат проверок выводится на экран (рис. 3).

Рис. 3. Результаты проверок.

Текущие блокировки можно просмотреть, просто щелкнув дважды левой клавишей мыши на строку с объектами на экране с результатами.

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


Автор: Шиболов Вячеслав Анатольевич


Комментариев нет:

Отправить комментарий