29 июля 2019 г.

Век живи, век учись! - I

Данным постом открываю новую серию кратких записей о моих открытиях в мире SAP систем и около них. Согласно первой части пословицы: "Век живи, век учись..." такие открытия периодически случаются и в тех областях, где казалось бы всё изучено вдоль и поперёк. 

RSPFPAR - человек и пароход!

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

Рис. 1. Отчёт RSPFPAR: первый экран.

Рис. 2. Отчёт RSPFPAR: список параметров.

Моё открытие заключается в том, что у отчёта RSPFPAR есть транзакция с таким же именем - RSPFPAR. (рис. 3).

Рис. 3. Запуск транзакции RSPFPAR.

Как найти транзакцию для ABAP программы?

Найти транзакцию для ABAP программы не сложно. Для этого достаточно в транзакции SE38 указать ABAP программу, после чего на панели нажать кнопку "Журнал использования" (Where-use list) (рис. 4).

Рис. 4. Поиск транзакции для ABAP программы. Шаг 1.

В диалоговом окне оставить галку только напротив пункта "Транзакции" и нажать кнопку "Выполнить" (рис. 5).

Рис. 5. Поиск транзакции для ABAP программы. Шаг 2.

Если хоть в одной транзакции используется указанная ABAP программа, то система выдаст транзакцию в списке. При создании транзакции можно просто указать ABAP программу, а можно добавить вариант для экрана выбора с предварительно заполненными полями. Таким образом, транзакций для ABAP программы может быть больше одной (рис. 6).  

Рис. 6. Поиск транзакции для ABAP программы. Шаг 3.

Начиная с версии SAP BASIS 6.20 для программы RSPFPAR есть не только транзакция RSPFPAR, которая выдает список всех параметров, но и дополнительные преднастроенные варианты. Например, транзакция RSPFPAR_LOGIN выдаёт сразу на экран список параметров по шаблону "login/*".

Век живи, век учись!


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


22 июля 2019 г.

SUSE Linux Enterprise Server 15 for SAP шагает по планете

SUSE Linux Enterprise Server for SAP Applications 15 SP1

С момента моего последнего поста "SUSE Linux Enterprise Server как платформа для SAP системы" новая версия SLES 15 укрепила свои позиции в качестве платформы для продуктов компании SAP.

Во-первых, для этой версии вышел пакет обновлений SP1, а это значит, что первые баги были вычищены. И хочется надеяться, что это не добавило слишком много новых. :) SAP всегда настоятельно рекомендует устанавливать последний доступный пакет обновлений на операционную систему.

Во-вторых, в матрице совместимости PAM есть информация, что последние продукты компании SAP уже поддерживают данную версию операционной системы.

Ещё раз напомню, что на данный момент официально (согласно официальному сайту https://www.suse.com/lifecycle/) поддерживается 3 версии SUSE Linux Enterprice Server:
  • SUSE Linux Enterprise Server 11 (SLES11): конец официальной поддержки - 31 марта 2019, конец расширенной поддержки (LTSS) - 31 марта 2022,
  • SUSE Linux Enterprise Server 12 (SLES12): конец официальной поддержки - 31 октября 2024, конец расширенной поддержки (LTSS) - 31 октября 2027,
  • SUSE Linux Enterprise Server 15 (SLES15): конец официальной поддержки - 31 июля 2028, конец расширенной поддержки (LTSS) - 31 июля 2031.

Можно заметить, что судя по данной информации, даже SLES 11 еще можно смело использовать.

Актуальную информацию по поддержке дистрибутивов Linux можно получить, заглянув в SAP note 936887 - End of maintenance for Linux distributions.

Что касается аппаратной платформы, то SAP поддерживает SLES 15 на следующих трёх:
  • SUSE Linux Enterprise Server 15 for AMD64 & Intel EM64T (SLES15-x86_64),
  • SUSE Linux Enterprise Server 15 for IBM Power Little Endian (SLES15-ppc64le),
  • SUSE Linux Enterprise Server 15 for IBM System z (SLES15-s390x).

Вернёмся к матрице совместимости (Product Availability Matrix). Согласно ей, SLES 15 поддерживается:
  • SAP NetWeaver 7.40 и SAP NetWeaver 7.50 с SAP Kernel 7.53 (рис. 1).
  • ORACLE 12.2.0.1 (рис. 1),
  • SAP HANA DB 1.0 (SP122 и выше) (рис. 2),
  • SAP HANA DB 2.0 (SP034 и выше) (рис. 2),
  • SAP MAXDB 7.9 (рис. 3),
  • SAP ASE 16.0 (рис. 4).

Рис. 1. Пример матрицы совместимости для SAP Solution Manager 7.2.

Рис. 2. Пример матрицы совместимости для SAP HANA DB.

Рис. 3. Пример матрицы совместимости для MAXDB.

Рис. 4. Пример матрицы совместимости для SAP ASE.

Развернуть SAP систему можно не только на платформу x86_64, но и, например, на IBM Power Little Endian (рис. 5).

Рис. 5. Пример матрицы совместимости для SAP HANA DB и платформы PPC64LE.

Про SAP ядро 7.49 есть упоминание, но релиза еще не было. Хотя, если судить по наличию строки, релиз должен быть в ближайшее время (рис. 6).

Рис. 6. Пример матрицы совместимости для SAP Solution Manager на SAP ядре 7.49.

Так же информация про SLES 15 появилась во всех основных SAP нотах, используемых при установке и подготовке операционной системы:

Отдельно стоит упомянуть про SAP ноты для конкретного релиза SLES 15:

P.S. А для SLES 12 вышел SP4.

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


15 июля 2019 г.

Блокировки в SAP системе - II

В первой части были рассмотрены вопросы концепции SAP блокировок, реализация механизма и мониторинга блокировок в SAP системе.

Продолжим.

Удаление блокировки вручную

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

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

Перед удалением блокировки рекомендуется выполнить следующие шаги: 
  • проанализировать запись блокирования,
  • удостовериться, что пользователь (владелец блокировки) вышел из системы (транзакция SM04),
  • удостовериться, что от данного пользователя нет запросов на обновление данных, которые еще не успели выполниться (транзакция SM13).

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

Если выполнение предыдущих шагов не привело к удалению записи из таблицы блокировок, то удалить блокировки вручную. Для этого выделить строку с записью блокирования и на панели нажать кнопку «Удалить», подтвердив серьёзность своих намерений в диалоговом окне (рис. 1).

Рис. 1. Удаление записи блокирования вручную.

Диагностика и решение проблем

Для проверки работы механизма блокирования можно выполнить его диагностику. Для этого на основном экране транзакции SM12 выбрать пункт меню «ДополнИнфо -> Диагностика». Программа совершит попытку установки тестовой блокировки, после чего выведет результаты на экран (рис. 2).

Рис. 2. Диагностика механизма блокировки в SAP.

Узким местом при настройке сервера блокировок может быть таблица блокировок (lock table). Размер таблицы блокировок ограничен параметром инстанции - enque/table_size. Единицей измерения параметра являются Кб, а спектр значений зависит от версии SAP: от 4 096 до 102 400, а в более свежих версиях верхний предел увеличен до 2 000 000 (рис. 3). По-умолчанию, в свежих релизах устанавливается - 64 000 Кб.

Рис. 3. Конфигурация размера таблицы блокировки в системе SAP NetWeaver 7.5.

В зависимости от сконфигурированного размера таблицы система устанавливает ограничения на максимальное количество записей, владельцев и аргументов, которое может быть сохранено в таблице. Например, при 4 096 Кб это число - около 5 000 (точное число отличается от версии к версии). Просмотреть максимальные значения таблицы блокировок можно, перейдя на основном экране транзакции SM12 в пункт меню «ДополнИнфо -> Статистика». Система отобразит максимальные и пиковые значения за время работы системы (рис. 4).

Рис. 4. Статистика работы сервера блокировок.

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

Заполнение таблицы блокировок необходимо периодически отслеживать с помощью транзакции SM12 (рис. 4). Значение в поле «Максим. уровень заполнения» не должно быть больше 90-95% от максимального возможного числа.


Еще одним узким местом может стать рабочий процесс блокировок при классической реализации сервера блокировок (первая часть статьи). При высокой нагрузке на механизм блокировок возможна конфигурация больше чем одного рабочего процесса блокировок. В больших инсталляциях возможно увеличение до 4-х рабочих процессов. Дополнительную информацию можно найти в SAP note # 127773 - Several enqueue work processes.

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

страница SAP Enqueue Server на сайте wiki.scn.com,
SAP note # 746138 - Analyzing lock table overflows,
SAP Lock Concept на SAP Help Portal (версия для SAP NetWeaver 7.5).
SAP note # 552289 - FAQ: R/3 lock management,
SAP note # 1565578 - Lock Table Overflow.


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


10 июля 2019 г.

Новый источник материалов SAP курсов


На днях набрёл на новый источник нескольких свежих материалов SAP курсов по администрированию SAP систем.

Наши индийские друзья-базисники в своём блоге выложили следующие курсы:
- ADM100, версия курса: 15, год: 2014, pdf (скан),
- TADM10, версия курса: 72, год: 2011, pdf,
- TADM12, версия курса: 72, год: 2011, pdf.

Материалы можно скачать на этой странице.

Отдельно еще есть TADM51 (версия - 10, год - 2013, pdf) вот по этой ссылке.

У кого-то тоже может быть есть ссылки, кроме указанных мною на этой странице?
Поделитесь в комментариях. Спасибо.

Предупреждение: материалы курсов компании SAP являются собственностью компании SAP AG.

Дополнение: к сожалению, блог стал недоступен. :(

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

8 июля 2019 г.

Блокировки в SAP системе - I

Это первая часть статьи про блокировки в SAP системе. Для начала рассмотрим концепцию SAP блокировок и реализацию механизма в SAP системе.

Концепция

Транзакции базы данных должны удовлетворять концепции LUW (Logical Unit of Work). Понятием LUW обозначают минимальный набор операций изменения данных (SQL-запросы INSERT, MODIFY, UPDATE, DELETE), который переводит базу данных из одного непротиворечивого состояния (consistent state) в другое непротиворечивое состояние. Транзакцию завершает COMMIT, который и вносит изменения в таблицы базы данных. Если во время выполнения LUW происходит сбой, то выполняется откат (ROLLBACK) всех изменений, вносимых текущей LUW. После чего база данных возвращается в предыдущее непротиворечивое состояние.

Если говорить о классических базах данных (исключим SAP HANA), то можно сказать, что система SAP использует базу данных только как хранилище данных. В SAP системе параллельно с базой данных ведётся свой собственный словарь данных. Об этом я рассказывал в этом посте. Этим обеспечивается независимость большинства программных решений компании SAP от платформы, в данном случае, от базы данных.

На уровне сервера приложений SAP существует своё понятие LUW (Logical Unit of Work). Так как SAP система оперирует не отдельными записями, а бизнес-объектами, то SAP транзакция, удовлетворяющая принципам LUW, является более широким понятием, чем транзакция базы данных. Понять разницу поможет следующая схема (рис. 1):

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

Для обеспечения выполнения транзакций, изменяющих данные, на уровне SAP (LUW уровня сервера приложений) в AS ABAP реализован отдельный механизм блокировок (SAP locks). SAP блокировка работает на уровне бизнес-объектов и может блокировать на уровне базы данных одну или несколько записей в одной или нескольких таблицах. SAP блокировка устанавливается на начальном этапе выполнения SAP транзакции, а удаляется только после успешного или неудачного завершения всей SAP транзакции. В первом случае (согласно концепции LUW) система переходит в следующее непротиворечивое состояние, а во втором возвращается в предыдущее, выполнив откат всех изменений (ROLLBACK).

Еще раз повторю: блокировка на уровне SAP действует в течении выполнения всех диалоговых шагов SAP транзакции и при этом не является блокировкой на уровне базы данных.

Реализация

Основным компонентом механизма блокировок в SAP системе является специальный сервер блокировок (Enqueue Server или Lock Server). В классической конфигурации сервер блокировок реализуется в виде рабочего процесса блокировки (ENQ) AS ABAP инстанции. Данный рабочий процесс настраивается только на одной AS ABAP инстанции, которая называется центральной (CI или PAS, по новой терминологии) (рис. 2). На других инстанциях, входящих в SAP систему, этого процесса быть не должно. Активация рабочего процесса блокировки производится через параметр инстанции - rdisp/wp_no_enq = 1.


Рис. 2. Рабочий процесс блокировки на центральной инстанции.
В свежих релизах SAP систем сервер блокировок инсталлируется в составе отдельной инстанции центральных сервисов (ASCS instance). В данном случае параметр rdisp/wp_no_enq на всех диалоговых инстанциях должен быть установлен в 0, а параметр enque/process_location = REMOTESA. Все параметры инстанции необходимые для установки в случае использования отдельного сервера блокировок можно найти на этой странице SAP Help Portal.

Сервер блокировок получает запросы на блокировку от рабочих процессов. Чаще всего это диалоговый (DIA) или фоновый (BTC) рабочий процесс. После получения запроса сервер блокировок проверяет существующие записи блокировок и, если пересечений нет, то устанавливает новую блокировку. Затем управление передаётся рабочему процессу инициировавшему блокировку (рис. 1). Стоит дополнительно отметить, что механизм несколько сложнее, чем описан мной. Например, существует несколько режимов блокировки (по частоте использования: E - Exclusive lock, S - Shared lock, X - eXclusive lock и O - Optimistic lock) и коллизии в зависимости от режимов блокирования решаются по-разному. Подробности можно найти на страницах SAP Help Portal, например, тут

Блокировки на уровне сервера приложений SAP хранятся в виде записей таблицы блокировок (lock table) в оперативной памяти того же сервера, где настроен сервер блокировок. Параллельно ведётся резервный файл блокировок. Имя файла настраивается через параметр инстанции enque/backup_file. Обычно это файл с именем ENQBCK, лежащий в log директории инстанции. Записи из файла помогают восстановить таблицу блокировок в памяти при рестарте сервера блокировок по той или иной причине.

Мониторинг

Для мониторинга и управления блокировками в SAP системе используется транзакция SM12 (пункт меню «Меню SAP –> Инструменты -> Администрирование -> Монитор –> Записи блокирования»). Транзакция позволяет просматривать таблицу блокировок, анализировать отдельные записи и, в случае необходимости, удалять блокировки вручную.

На начальном экране транзакции можно задать параметры фильтра, ограничивающего выводимый список текущих записей блокирования (рис. 3). Можно указать:
  • имя таблицы, записи которой блокированы;
  • аргументы блокирования; 
  • мандант системы;
  • имя пользователя, установившего блокировку (владельца блокировки). 

Рис. 3. Начальный экран транзакции SM12.

После нажатия на панели кнопки "Список" система отобразит текущее содержимое таблицы блокировок (рис. 4).

Рис. 4. Пример списка блокировок системы SAP.

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

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

Продолжение во второй части.