27 апреля 2020 г.

Фоновые задания в SAP системе - II

В первой части статьи я начал рассказ про фоновую обработку в SAP системе. Успел коснуться вопросов создания фонового задания, условий запуска и приоритетов. Также я рассказал про фоновые процессы и про организацию группы серверов для фоновой обработки. Продолжим.

Фоновое задание в системе может находится в нескольких статусах (рис. 1).

Рис. 1. Возможные статусы фонового задания.

Когда мы создаём задание в транзакции SM36 или в транзакции напрямую и ещё не указали ему условия для запуска, оно имеет статус "Запланировано". Как вы догадались, находящееся в этом статусе задание, выполняться в системе не будет. 

После того, как в задании было указано условие для запуска, оно переходит в статус "Деблокировано". На английском этот статус звучит более логично - Released. После этого планировщик заданий в SAP системе начинает видеть данное задание и может запланировать его выполнение, если условия для запуска будут выполнены.

Как только условия для запуска выполнились (например, наступили нужные дата и время), планировщик ставит задание в очередь на исполнение, меняя его статус на "Готово".

Если фоновый рабочий процесс берёт задание из очереди на исполнение, оно меняет свой статус на "Активно".

А в конце, у такого задания есть два выхода - "Завершено" в случае успешного выполнения всех шагов задания или "Отменено" в случае возникновения ошибки на каком-то этапе.

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

Рис. 2. Пример начального экрана транзакции SM37.

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

Деблокированное задание нельзя изменить, но как вы можете видеть на рисунке 1, такое задание можно перевести обратно в статус "Запланировано". А после этого уже внести изменения, поменяв, например, шаги задания, условия запуска или периодичность. Далее, сохранив изменения, перевести задание в статус "Деблокировано".

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

Несколько слов про планировщик фоновых заданий. 

За планирование фоновых заданий в SAP системе отвечает ABAP-программа SAPMSSY2, которая запускается периодически через фиксированные интервалы времени. Эти интервалы регулируются через SAP переменную rdisp/btctime. Интервал устанавливается в секундах. Значение по умолчанию - 60 секунд. В случае изменения значения рекомендуется выбирать из интервала 30-60 секунд. Если в текущей системе несколько инстанций, то для повышения производительности рекомендуется выставлять разные значения на разных инстанциях - например, 57, 56, 59, 60 секунд. В таком случае программа SAPMSSY2 на разных инстанциях будет срабатывать асинхронно. Что улучшит работу механизма балансировки и производительность системы фоновой обработки.

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

Дополнительную информацию про моменты старта планировщика можно найти в SAP note 923228 - Background job scheduler: Use of processes that have become free и SAP note 1508504 - Load balancing in background processing


Часто возникает вопрос: как приостановить на время выполнение какого-то запланированного задания, а потом опять запустить выполнение?

Здесь стоит иметь ввиду, что приостановить задание, которое уже выполняется на фоновом рабочем процессе и имеет статус "Активно", нельзя. Такое задание можно только прервать с ошибкой. А в вопросе выше речь идёт о заданиях, которые находятся в статусе "Деблокировано" и могут быть запущены планировщиком согласно их расписанию. 

Ответ: найдите данное задание в транзакции SM37, выделите его и измените его статус на "Запланировано", выбрав соответствующий пункт меню (рис. 3).

Рис. 3. Пример смены статуса фонового задания с "Деблокировано" на "Запланировано".

Для активации задания необходимо выполнить обратную операцию: сменить статус на "Деблокировано", нажав на панели в SM37 соответствующую кнопку (рис. 4). А после этого в диалоговом окне подтвердить условия запуска.

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

Так можно поступать с периодическими заданиями, которые необходимо временно приостановить.

Для централизованной приостановки всех фоновых заданий в системе существует отдельная программа - BTCTRNS1 (запуск через SE38). Приостановка всех фоновых заданий часто бывает нужна перед процедурой копирования или обновления (upgrade) системы. После выполнения отчёта все фоновые задания в системе имеют статус "дебл./ожид." (рис. 5).

Рис. 5. Статус фоновых заданий в системе после выполнения программы BTCTRNS1.

Для обратной активации всех фоновых заданий используется программа - BTCTRNS2.
Подробности про этот инструментарий можно найти в SAP note 37425 - Job reset for upgrade or system copy.

Ещё один интересный отчёт BTCAUX14 (присутствует в системах от SAP_BASIS 640 и свежее), который выдаёт список фоновых заданий согласно их частоте выполнения в системе в очень читабельном виде (рис. 6). Подробности в SAP note 1439806 - Listing jobs according to their frequency.

Рис. 6. Пример вывода отчёта BTCAUX14.

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

Ну и ещё можно заглянуть в SAP note 519059 - FAQ: Background processing system для получения дополнительных сведений про фоновую обработку.

Применить эту информацию на практике можно, приобретя мой курс практических заданий SAPADM 2.0. В курсе "Задание 7" из второго пакета полностью посвящено фоновой обработке.


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

21 апреля 2020 г.

Фоновые задания в SAP системе - I

Сегодня я хотел бы поговорить про фоновую обработку в SAP системе. 

Как вы уже знаете (например, из этого поста), работа пользователей в ABAP-части SAP системы возможна в двух режимах - диалоговом и фоновом. 

Фоновый (background) режим работы используется для запуска долгих тяжелых отчетов или стандартных периодических заданий для обслуживания SAP системы (задания, собирающие различную статистику, проводящие чистку и тому подобное). Для работы ABAP-программы в фоновом режиме используются фоновые задания. Особенностью фоновых заданий является то, что они не требуют постоянного коннекта пользователя с системой посредством SAP GUI. То есть пользователь планирует задание после чего может выйти из системы, а программа запустится и отработает без него. Этот факт некоторым образом ограничивает тип запускаемой программы - не работают функции связанные с рабочей станцией пользователя. Например, Frontend печать или загрузка данных с компьютера пользователя. Но в остальных случаях фоновая обработка это удобно. 

Сразу отмечу тот момент, что в целом ABAP-программа в фоне работает не быстрее и  не медленнее, чем в диалоговом режиме. Но благодаря особенностям фоновой обработки мы можем запланировать выполнение программы без нашего участия в тот момент, когда нагрузка на систему минимальна. И в этом сила фоновой обработки. Есть ещё небольшие особенности в выделении памяти рабочему процессу и в фиксировании/откате изменений в базе данных. Но они не значительны.

Планирование фоновых заданий производится в транзакции SM36 (рис. 1). 

Рис. 1.Транзакция SM36: пример планирования фонового задания.

Данная транзакция обладает широкими возможностями по планированию. 

Сначала необходимо определить имя фонового задания. Указать его класс и цель выполнения (рис. 1: поля области 1). 

Цель выполнения это конкретная инстанция данной системы, у которой есть хотя бы один фоновый процесс. 

Ведь вы помните, что за обработку фоновых заданий в системе отвечают рабочие процессы специального типа - фоновые (тип BTC). Количество рабочих процессов данного типа настраивается через SAP параметр rdisp/wp_no_btc.

Заполнять поле "Цель выполнения" не обязательно. Можно оставить его пустым, тогда система сама выберет на какой инстанции выполнить обработку, используя механизмы балансировки нагрузки.

А ещё в качестве цели выполнения можно указать группу серверов фоновой обработки. Управление группами серверов для фоновой обработки осуществляется в  транзакции SM61. Ситуация аналогичная Logon Group для диалоговой обработки (транзакция SMLG). Создаёте группу и включаете в неё инстанции. Причём, для исключения какого-то сервера из обработки можно создать группу с именем SAP_DEFAULT_BTC. После этого включаете в неё все инстанции кроме той (тех), что хотите исключить. В результате, если при планировании поле "Цель выполнения" оставить пустым, то планировщик выберет инстанцию из тех, что включены в группу SAP_DEFAULT_BTC. Подробности можно найти в SAP note 786412 - Determining execution server of jobs w/o target server

Теперь про классы. Классов заданий в системе 3: A, B и C. Классы имеют разный приоритет. A - самый высокий, C - самый низкий. Имейте в виду, что приоритеты используются только при запуске задания. Если при выборе очередного задания для старта в очереди окажется несколько заданий, которые уже можно запустить, то планировщик будет выбирать и запускать задания основываясь на приоритете (рис. 2).

Рис. 2. Приоритет фоновых заданий, используемый при планировании запуска.

При этом важно запомнить, что на скорость выполнения конкретного задания, приоритет влияния не имеет. Только на планирование. 

Дополнительно существует возможность выделить часть фоновых рабочих процессов инстанции для выполнения только заданий класса A. Сделать это можно при активации и настройки режимов работы инстанции (транзакция RZ04). В этом случае при планировании фоновых заданий данные рабочие процессы не будут участвовать в обработке фоновых заданий классов B и С. Но злоупотреблять этой возможностью не рекомендуется, так как можно получить обратный эффект и снизить общее время выполнения всех фоновых заданий в системе. Потому что большинство заданий в системе (70% и более) имеют приоритет C. Даже стандартные фоновые задания или системные задания, планируемые в календаре транзакции DB13.

Далее при создании фонового задания необходимо задать шаги задания (рис. 1: кнопка 3). Шагов может быть несколько. В качестве шага задания может выступать ABAP-программа, внешняя команда или внешняя программа. Если ABAP-программа имеет экран выбора, то предварительно необходимо создать вариант с заполненными полями экрана. Этот вариант экрана указывается вместе с ABAP-программой при планировании. Про внешние команды операционной системы у меня был отдельный пост.

После указания шагов задания необходимо зафиксировать условия запуска задания (рис. 1: кнопка 2). Выбор достаточно широкий (рис. 3).

Рис. 3. Условия запуска фонового задания.

Можно запустить задание сразу же после окончания процесса создания (кнопка "Немедл-но"). А можно задать точные дату и время запуска (кнопка "Дата/Время"). 

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

Также в качестве условия запуска задания можно указать время окончания другого фонового задания (кнопка "ПослеЗдн"). Таким образом, можно выстроить цепочку фоновых заданий, которые будут выполняться друг за другом. Причём, можно анализировать статус (указывается дополнительно), с которым выполнилось предыдущее задание. В этом случае последующее задание запустится лишь в том случае, если предыдущее выполнилось успешно (с кодом 0).

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

Ещё один нюанс в планировании заданий - можно создавать периодические задания, нажав на кнопку "Значения периодов" и выбрав нужный период (рис. 3).

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


Создать фоновое задание можно так, как я только что описал, а можно вызвать Ассистента по заданиям (кнопка на панели начального экрана транзакции SM36) и пройти все шаги с его помощью.

Еще есть возможность запуска транзакции в фоновом режиме прямо из самой транзакции. Это можно сделать только в том случае, если на начальном экране транзакции есть пункт меню "Программа -> Фоновое выполнение" (рис. 4). Выбрав этот пункт, вы запланируете фоновое задание, в котором 
автоматически с текущей программой будет добавлен вариант экрана с уже введёнными значениями в полях.

Рис. 4. Пример фонового выполнения диалоговой программы.

На сегодня это всё. Продолжение можно прочитать тут.




13 апреля 2020 г.

Машинный перевод SAP notes и опрос на знание английского языка

Все знают что такое SAP notes. Кто не знает - может прочитать мои статьи про это.

Как вы знаете, SAP notes размещены на SAP Support Portal на двух языках - немецком и английском. Но недавно появилась новая возможность - перевод содержимого SAP note на ряд языков, включая наш родной, русский язык. Перевод правда машинный, то есть созданный программой.

Для доступа к этой возможности необходимо пролистать открытую в Web-браузере SAP note до конца и найти там раздел "Languages" (рис. 1).

Рис. Список доступных языков в SAP notes.

В этом разделе нажимаем на нужный язык и запускается (робот, ИИ, машинное обучение) (нужное подчеркнуть) (рис. 2), создавая нам перевод содержимого SAP note. :)

Рис. 2. Процесс перевода SAP note.

Перевод получается, на удивление, сносным. Я помню первые попытки написания систем автоматического перевода текстов в сети Интернет. Казалось их создавали в юмористических целях. Да и до сих пор, если вы совершаете, например, покупки на AliExpress.com, то можете наблюдать переведённые на русский язык ответы от продавцов или их комментарии. Смешно бывает чаще, чем верно. Наверное, "китайский - русский" слишком сложная пара языков для автоматического перевода. :)

Но вернёмся к SAP notes. Перевод сносный, но не более того. Не обращаясь к оригиналу, читать и применять не советую. :) 

Возьмём для примера SAP note 1763593 - Starting and stopping SAP system instances - startsap/stopsap are deprecated. Посмотрите на выделенные мною места (рис. 3).

Рис. 3. Пример машинного перевода SAP note.

Во-первых, программа пытается переводить команды и их опции. Во-вторых, как вам скрипт с названием "стартовала"? Не эта ли программа пишет тексты для русских героев в американских фильмах? :) В дальнейшем по ходу рассказа коверкается название скрипта stopsap. Причём, заметьте по разному. Такое ощущение, что программа переводит его на русский, а потом понимает, что не выходит, и возвращает на язык оригинала. Но так как было уже почему-то не получается. :)

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

Для сравнения посмотрите, как переводит мой плагин для Web-браузера Google Chrome (рис. 4).

Рис. 4. Пример перевода SAP note через плагин Vimbox.

Совсем другое дело, согласитесь? Что не надо - не переводит, а перевод остального получается прям очень человеческим. Правда в названиях скриптов съедает букву "s" в словах sap, но это не критично.

Плагин называет Vimbox. Работает и как словарик, и как автоматический переводчик текста. Выделяете текст в браузере, пару секунд и в всплывающем окне готов перевод. Рекомендую.

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

А давайте проведем опрос. Отметьте на каком уровне вы владеет английским языком.

Спасибо всем за участие. Результаты опроса на рис. 5.

Рис. 5. Результаты опроса.

Большинство, кто участвовал в опросе, знают английский язык примерно на одном уровне - чтение технической литературы с разной степенью включения словаря. Без этого в любой IT-профессии никуда. Но надо стремиться к большему. От кого-то я слышал, что стыдно в XXI веке не знать английский язык. :)



8 апреля 2020 г.

Книга "Тайм-менеджмент для системных администраторов"


Продолжаю рассказ о книжной полке администратора SAP систем. 

Закончил чтение книги Томаса Лимончелли "Тайм-менеджмент для системных администраторов" и хочу поделиться своим мнением.

Книг об управлении временем и задачами я прочитал достаточное количество. Все они несут примерно одинаковые и в основном здравые идеи. Но эта книга особенная. Автор - настоящий системный администратор с не одним десятком лет опыта за плечами, который при этом активно интересуется темой управления временем. То есть эта книга про нас. Об этом вы поймете сразу же, с первых страниц. Томас очень точно подмечает основные черты и психологические нюансы типичных системных администраторов. От этого портрета он и отталкивается в своей книге. Делится советами и решениями, которые помогут в работе именно таким как мы. 

Книга небольшая, читается очень легко и быстро. Язык изложения простой, местами с юмором, есть даже комиксы. :) Не смотря на то, что книга написана в 2007 году, 80-90% советов актуальны и сейчас.

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

Лично я для себя открыл несколько интересных моментов, которые обязательно постараюсь внедрить в свою жизнь и работу. 

Книгу настоятельно рекомендую как к прочтению, так и к добавлению в личную библиотеку. В сети книга ищется (и находится) легко. 

Книгу посоветовал Дмитрий Куликовский в своём рассказе о работе системного администратора Yandex. Если ещё не смотрели, то настоятельно рекомендую ознакомиться


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


3 апреля 2020 г.

Конфигурирование SAP системы - IV

В 2013 году я написал цикл статей про параметры AS ABAP части SAP системы. В постах я описал где они хранятся и как их изменять. Можете освежить свои знания и прочитать статьи еще раз:

Как вы помните, параметры AS ABAP части SAP системы хранятся в профилях (profiles). До версии SAP NetWeaver 7.1 было 3 профиля (рис. 1). В более свежих системах содержимое двух профилей было объединено в один и общее количество профилей сократилось до 2-х (для системы с одной инстанцией). Об этом я рассказывал в этом посте

Рис. 1. Последовательность чтения SAP параметров и профили SAP.

Сегодняшний рассказ будет больше посвящён резервным копиям профилей SAP. Как вы поняли из моих предыдущих постов: параметры - это очень важная часть SAP системы. От них зависит стабильность работы системы, её производительность и безопасность. С помощью параметров мы выделяем аппаратные и программные ресурсы для SAP системы. При некорректных значениях ряда параметров система может работать крайне не стабильно или вообще не подняться.

Поэтому необходимо соблюдать ряд правил при работе с параметрам SAP системы.

Правило 1. Всегда старайтесь за раз изменять значение только одного параметра. Это позволит точно определить почему у вас система не поднялась или работает некорректно после изменений. Для применения большинства параметров необходим рестарт сервера приложений SAP. В случае продуктивной системы, которую вы не можете часто, после изменения каждого параметра, перезагружать, изменение параметров следует предварительно со всей тщательностью протестировать в тестовой среде. В идеале это необходимо сделать на тестовой системе с идентичной платформой и параметрами.

Правило 2. Профили SAP хранятся в операционной системе в виде текстовых файлов. Расположены файлы, в случае Unix, в директориях /usr/sap/<SID>/SYS/profile и /sapmnt/<SID>/profile. В случае Windows это директория <DISK>:\usr\sap\<SID>\SYS\profile. SAP не рекомендует изменять параметры на уровне операционной системы. Поэтому второе правило говорит о том, что SAP профили необходимо загрузить в базу данных. Сделать это можно в транзакции RZ10. И в дальнейшем изменение параметров производить там же.

Правило 3. Если вы изменяете параметры в SAP профиле, то ПЕРЕД операцией всегда делайте резервную копию предыдущей версии файла.

SAP заботится о нас (системных администраторах), поэтому, если вы придерживаетесь всех вышеописанных советов, то о резервных копиях профилей можно почти не думать. SAP подумал о них за нас.

Во-первых, когда мы ведем профили полномочий в транзакции RZ10, система автоматически при внесении изменений в профиль и сохранении его создаёт новую версию. А предыдущую версию профиля сохраняет в базе данных (рис. 2).

Рис. 2. Просмотр сохранённых версий профиля SAP.

По любой старой версии профиля всегда можно просмотреть административные данные: имя профиля, версию, когда и кем были внесены изменения  (рис. 3).

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

Ну и конечно же можно открыть содержимое профиля и просмотреть все значения параметров SAP.

Теперь перейдём на уровень операционной системы и посмотрим что с профилями там.

При ведении профилей SAP через транзакцию RZ10 в каждом файле автоматически генерируется заголовок с полезной информацией. В заголовке можно найти версию профиля, дату активации и автора. Дополнительно добавляются комментарии для всех изменённых параметров (рис. 4).

Рис. 4. Пример профиля SAP с уровня операционной системы.

При этом каждый раз, когда мы в транзакции RZ10 нажимаем на кнопку "Сохранить" и активируем изменённый профиль, на уровне операционной системы создаётся копия старого профиля. В системах до SAP NetWeaver 7.1 это была одна копия с расширением .BAK, которая каждый раз перезаписывалась. То есть хранилось 2 копии профиля - текущая и предыдущая (рис. 5).

Рис. 5. Пример списка профилей SAP на уровне операционной системы.

А, начиная с SAP NetWeaver 7.1 все предыдущие версии профиля хранятся в виде отдельных копий с расширениями .1, .2, .3 и так далее (рис. 6). Только не путайте эти числа с версиями профиля в RZ10, они не совпадают. В данном случае, это версии копий файла на уровне операционной системы.

Рис. 6. Пример списка профилей SAP на уровне операционной системы.

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


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