Показаны сообщения с ярлыком tp. Показать все сообщения
Показаны сообщения с ярлыком tp. Показать все сообщения

29 сентября 2016 г.

Как вручную добавить транспортный запрос в очередь

В корректно настроенной транспортной системе (TMS) всё работает как часы:
  1. При деблокировании (Released) транспортного запроса в системе разработки на уровне файловой системы сервера создаются файлы с данными.
  2. Транспортный запрос автоматически, в зависимости от настроек путей переноса, попадает в очередь одной или нескольких целевых систем.
  3. После импорта запроса в целевую систему, запрос автоматически попадает в очередь следующей системы (обычно продуктивной), опять же, в зависимости от настроек путей переноса.
Про транспортный запрос я писал недавно тут.

Но иногда бывают ситуации, когда необходимо добавить запрос в очередь транспортной системы вручную. Например, данный запрос был принесен извне: из другой системы, которая по территориально-географическим или организационно-политическим причинам не может быть связана транспортной системой с целевой, либо транспортный запрос рекомендован к импорту в систему нотой или службой поддержки SAP. Или даже, разработчик создал запрос в своей локальной системе разработки или на другом проекте и хочет импортировать в текущую систему. Так же можно возвращать удаленные из очереди запросы.

Как вы уже знаете, транспортный запрос представляет собой два файла:
  • контрольный файл вида K9<номер_запроса>.<SID> в директории /usr/sap/trans/cofiles,
  • дата-файл вида R9<номер_запроса>.<SID> в директории /usr/sap/trans/data.

Перед добавлением транспортного запроса в очередь целевой системы необходимо скопировать файлы запроса на уровень файловой системы сервера приложений. Файлы раскладываем согласно их назначения (директории cofiles и data). На Unix-like системах не забываем выставить необходимые полномочия/владельца файлов (команды chmod, chown).

После этого переходим в транзакции STMS в очередь необходимой системы. Выбираем пункт меню "Дополнительная информация -> Другие запросы -> Добавить" и указываем имя запроса по форме <SID>K9<номер_запроса> (рис. 1, 2 и 3).

Рис. 1. Добавление запроса в очередь на перенос - I.

Рис. 2. Добавление запроса в очередь на перенос - II.

Рис. 3. Добавление запроса в очередь на перенос - III.

После этого запрос будет в очереди и появится возможность импорта его в текущую систему.

Стоит отметить, что технически очередь транспортной системы представляет собой плоский файл с именем <SID>, который находится в директории /usr/sap/trans/buffer. При обновлении очереди в транзакции STMS происходит анализ этого файла на предмет новых записей о запросах в очереди. Новые записи добавляются в таблицу TMSBUFREQ в базе данных (рис. 4 и 5).

Рис. 4. Пример файла буфера транспортной системы.

Рис. 5. Пример таблицы TMSBUFREQ.

Причем, те запросы, что удаляются из очереди на перенос, остаются в файле в виде строки со знаком комментария (#) (рис. 4).

Запрос в очередь импорта можно добавить и на уровне командной строки сервера приложений, что удобнее при большом количестве добавляемых запросов. Формат команды:
> tp addtobuffer <transport_number> <SID>  pf=/usr/sap/trans/bin/<transport profile>
Пример выполнения (рис. 6).

Рис. 6. Пример добавления транспортного запроса в буфер через командную строку.

Для того, чтобы таблица TMSBUFREQ, а с ним и экран транзакции STMS, обновлялись автоматически, можно настроить автообновление. Для этого в транзакции STMS перейти в пункт меню "Дополнительная информация -> Личные параметры настройки" и установить check-box "Автомат. обновить просмотр" (рис. 7 и 8).

Рис. 7. Установка личных параметров настройки в STMS.

Рис. 8. Настройка автоматического обновления в STMS.

Если у вас в настройках транспортной системы в качестве целевой системы используется система с указанием целевого манданта, то при добавлении запроса в очередь не забывайте указывать мандант. Иначе система заблокирует очередь и не даст импортировать запросы (рис. 9).

Рис. 9. Запрос без указания целевого манданта.

Настройку и нюансы работы с транспортной системой в SAP можно найти в курсе SAP ADM325 - Software Logistics.


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


6 сентября 2016 г.

Как восстановить cofile из datafile транспортного запроса

Как вы прекрасно знаете, в SAP системе есть такая чудесная вещь, как транспортная система (Transport Management System или TMS), которая позволяет производить изменения (настройку и разработку) в одной SAP системе, а в последующем переносить изменения в другие системы. SAP системы с помощью транспортной системы объединяются в ландшафты. В ландшафты можно объединять системы одного типа и одной версии (рис. 1).

Рис. 1. Объединение SAP систем в транспортные ландшафты.

Юнит, в котором в SAP ландшафте переносятся изменения, называется транспортным запросом (Transport Request). Сразу после создания транспортный запрос находится в состоянии "Изменяемо" (Modifiable). А после окончания разработки и готовности импортировать изменения в целевые системы запрос необходимо деблокировать, то есть перевести его в статус "Деблокировано" (Released). Второй статус часто вызывает недоумение, но здесь, как мне кажется, виноват неудачный перевод. По английски он звучит "Released", то есть готовый к импорту в другую систему, а по русски "Деблокировано". Мне кажется, что русское название статуса идёт от того факта, что с объектов, которые лежали в запросе сняли блокировку. Блокировка программ и других объектов ABAP-словаря нужна для того, чтобы исключить одновременное внесение изменений разными программистами в один объект.

Напомню, что один небольшой хинт про статусы запросов я описывал в этом посте.

Стоит учесть, что пока транспортный запрос находится в состоянии "Изменяемо", физически никакие объекты никуда не выгружены и существуют только в исходной SAP системе. Чаще всего это система разработки (DEV). А в запросе хранятся лишь ссылки на данные объекты. И только во время процесса "Деблокирования" или "Releasing" происходит выгрузка объектов, в их текущих версиях, в файлы транспортного запроса. Транспортный запрос представляет собой два файла (рис. 2):
  • контрольный файл в директории /usr/sap/trans/cofiles,
  • дата-файл в директории /usr/sap/trans/data.

Рис. 2. Файлы транспортного запроса.

Контрольный файл или cofile содержит информацию об объектах транспортного запроса, шаги импорта, которые необходимо будет выполнить и т.п. Дата файл содержит экспорт данных из базы данных.

На уровне операционной системы сервера работу транспортной системы обеспечивает утилита tp.

Так вот, из двух файлов транспортного запроса важным является дата-файл, а контрольный файл может быть восстановлен из него с помощью утилиты tp.

Формат команды восстановления следующий:
tp createcofile <транспортный запрос> pf=<path_to_tp_profile> -s <SAP SID>

Пример выполнения на рисунке 3.

Рис. 3. Восстановление контрольного файла из дата файла транспортного запроса.

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

Про транспортную директорию можно найти информацию тут.

Научиться настривать транспортную систему можно в последнем пакете моего обучающего курса.


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


21 апреля 2014 г.

Как убрать кнопку "Импортировать все запросы"

При настройке транспортной системы в транспортном ландшафте SAP систем есть возможность выбора из трех стратегий импорта транспортных запросов:
  • массовый импорт запросов (или контролируемый очередью),
  • одиночный импорт,
  • импорт контролируемые через workflow.
При массовом импорте запросов (queue-controlled mass transports) основной стратегией является импорт запросов очередью, определенной каким-то проектом, пользователем или периодичностью. Данная стратегия позволяет получить максимальную синхронизацию и консистентность систем, входящих в транспортный ландшафт. При этом не исключается импорт одиночных запросов.

При выборе стратегии одиночного импорта (single transports) импорт возможен только одиночными запросами. При этом запросы импортируются только один раз. Стратегия требует особого контроля со стороны системного администратора и разработчиков. Данный случай подходит для систем и проектов, на которых генерируется относительно небольшое количество транспортных запросов.

Последняя стратегия (workflow-controlled transports) подразумевает организацию специальной процедуры (QA Approval Procedure), где определяются ответственные, которые могут давать "добро" на импорт запросов. Импорт запросов осуществляется автоматически.

Посмотреть/переключить стратегию можно в утилите настройки транспортных маршрутов (транзакция STMS, пункт меню "Overview -> Transport Routes"), если дважды щелкнуть мышью на системе-контроллере транспортного домена (рис. 1 и 2).

Рис. 1. Экран настройки транспортных маршрутов.

Рис. 2. Экран изменения атрибутов системы.
При настройке транспортной системы на большинстве проектов выбор падает на стратегию массового импорта, которая, к слову говоря, является стратегией по-умолчанию. Эта стратегия наиболее гибкая и мощная в плане возможностей для импорта транспортных запросов. Панель управления в данном случае выглядит так, как это представлено на рисунке 3.

Рис. 3. Панель управления очередью транспортных запросов.

Как видно из снимка экрана, процесс планирования и запуска импорта транспортных запросов представлен двумя кнопками:
  • импортировать все запросы,
  • импортировать запрос.
Первая кнопка часто является проблемой и головной болью для администраторов. Если полномочиями на импорт транспортных запросов в системе обладает большое количество специалистов, то существует вероятность того, что кто нибудь когда нибудь нажмёт на эту кнопку. В результате нажатия происходит импорт всех транспортных запросов, находящихся в данный момент в очереди. А так как часто, идя на поводу у консультантов, специалист по BASIS не удаляет уже импортированные запросы на перенос (оставляя их для истории или повторного импорта в систему), то система в результате операции очень сильно изменяется. :) Как вы знаете, откатить транспортный запрос назад невозможно, поэтому решение возникшей проблемы, вопрос не из легких.

Но есть возможность эту кнопку с панели убрать. Для этого достаточно в параметрах утилиты tp нужной системы прописать параметр "NO_IMPORT_ALL" со значением 1. Сделать это можно, вызвав в транзакции STMS пункт меню "Overview -> Systems" и дважды щелкнув левой клавишей мыши на нужной системе. А затем в закладке "Transport Tool" в режиме редактирования добавить вышеуказанный параметр (рис. 4).

Рис. 4. Редактирование параметров утилиты tp.

После сохранения настройки панель управления очередью импорта измененной системы будет содержать только кнопку "Импортировать запрос" (рис. 5).

Рис. 5.  Панель управления очередью импорта без кнопки.

Надеюсь, что этот небольшой момент позволит кому-то из вас избежать лишней работы и головной боли.

Еще раз напомню, что вопросы касающиеся транспортной системы освещены в учебном курсе SAP ADM325.

3 марта 2014 г.

Механизм импорта транспортных запросов. Решение проблем

В этом посте рассказывая про транспортную систему (TMS), я уже упоминал, что она используется не только для импорта транспортных запросов, но и для обновления системы пакетами поддержки (SAP Support Packages), и при установке дополнений в систему (add-ons).

Процесс импорта в SAP систему, в отличии от экспорта (деблокирования транспортных запросов), сложный многофазный процесс. Во время импорта используется большое количество утилит:
  • tp - утилита на уровне операционной системы, которая управляет всем процессом импорта, согласовывая работу всех инструментов;
  • R3trans - утилита на уровне операционной системы, которая умеет выгружать и загружать данные в любую базу данных, поддерживаемую компанией SAP AG;
  • RDDIMPDP - диспетчер импорта в SAP системе, запускающий фоновые RDD*-задания;
  • RDD*-задания - набор фоновых ABAP-отчетов, которые выполняют различные фазы импорта в SAP системе. 
Утилита tp согласовывает работу фоновых заданий через таблицы базы данных TRBAT и TRJOB. В первую из них утилита tp добавляет задания для диспетчера импорта (RDDIMPDP) в виде списка запросов на импорт с обозначением текущих фаз импорта. Во второй фиксируются номера и ID фоновых RDD*-заданий во время выполнения. После окончания импорта утилита tp удаляет записи из таблиц, считывая коды возврата. Таким образом, если в данный момент не происходит импорт запросов на перенос, то данные таблицы не должны содержать записи.

Основные шаги импорта перечислены в таблице на рисунке 1.

Рис. 1. Шаги по импорту транспортных запросов/пакетов поддержки в SAP систему.

Как вы наверное знаете, при импорте нескольких запросов каждый шаг выполняется для всех запросов на импорт одновременно. Это приводит к тому, что на этапе, например, активации, если какой-то объект существует в нескольких запросах, то выбирается и активируется только самая последняя (можно считать самая корректная) версия объекта.

Но вернемся к таблице. Для каждого шага утилитой tp вызывается своя утилита (поле "Инструмент"). Каждый инструмент в поддиректории /usr/sap/trans/tmp генерирует журнал выполнения (поле "Вид журнала"), который после завершения этапа переносится в поддиректорию /usr/sap/trans/log.

Диспетчер импорта (RDDIMPDP) запускается по событию SAP_TRIGGER_RDDIMPDP, которое инициализирует tp с уровня операционной системы через утилиту sapevt (рис. 2). Все RDD*-задания выполняются из под пользователя DDIC (рис. 3).


Рис. 2. Настройки задания RDDIMPDP.

Рис. 3. Пример выполненных фоновых RDD*-заданий при импорте запросов.

Планирование диспетчера импорта производится через отчет RDDNEWPP (000 мандант, пользователь DDIC, транзакция SE38 -> отчет RDDNEWPP -> Выполнить) (рис. 4).

Рис. 4. Планирование фонового задания RDDIMPDP.

Итак, если по какой-то причине импорт запросов/пакетов поддержки не происходит, то проверяем следующее:
  • журнал утилиты tp, который доступен по следующему пути "транзакция STMS -> Обзор -> Импорты -> Перейти к -> ПрогрУпрПереносом (TP): системный журнал (выбрать систему)" (или на уровне операционной системы файл /usr/sap/trans/log/SLOG*.SID);
  • не блокирован ли пользователь DDIC в 000 манданте;
  • в транзакции SM37 анализ запуска диспетчера импорта (RDDIMPDP) и RDD*-заданий;
  • на уровне операционной системы в поддиректориях /usr/sap/trans/tmp и
    /usr/sap/trans/log анализ журналов (рис. 1), определение сбойного шага импорта;
  • в транзакции SE16 проверка записей таблиц TRBAT и TRJOB.

Если перенос запроса завис на одном из этапов, за который отвечает одно из RDD*-заданий, то можно попробовать, войдя в 000 мандант под пользователем DDIC, выполнить программу RDDIMPDP через транзакцию SE38 вручную.

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

Дополнительная информация по данной теме:

23 июля 2009 г.

Решение проблем с транспортной системой


Самое гениальное, что есть в системе SAP и что кочует практически неизменным из версии в версию, это транспортная система (TMS). И действительно, зачем менять прозрачный и отлаженный механизм? :)
Но время от времени и в такой идеальной системе возникают проблемы. Как у меня сегодня утром. Перестали импортироваться запросы в тестовую систему. Перелопатил всё что можно, пока докопался до причины. Решил написать памятку для коллег. И так,
  • Транзакция STMS. Входите в очередь нужной системы и там изучаете пункты меню "Перейти к". Особенно пункты "Монитор импорта" и системный журнал программы tp.
  • Таблица E070L. Содержит номер последнего запроса в системе. Можно сделать скачок в будущее :) Подробности в SAP Note # 12799.
  • Таблица TMSTLOCKR. Хранит блокировки импортируемых в данный момент запросов.
  • Таблицы TRBAT и TRJOB. Временные записи во время импорта.
  • Фоновые задания RDDIMPDP. Смотреть выполняются или нет, почему. Планирование заданием RDDNEWPP в 000 манданте. Подробности в SAP Note # 26966.
  • На уровне ОС файловая система /usr/sap/trans и поддиректории. Полномочия, права, свободное место.
  • Процессы tp на уровне ОС.
Есть хороший курс по транспортной системе (TMS) - ADM325. Рекомендуется минимум прочитать самостоятельно.

P.S. А моя проблема была в старой записи в табличке TRJOB. Кстати, очистить такую рабочую табличку от всех записей можно через транзакцию SE14. Вписываете имя объекта. Нажимаете кнопку "Edit" и, выбрав "Delete data", жмёте "Activate and adjust database". Опля! И табличка пустая.


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