сап lock что это

Записки SAP Basis консультанта

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

эксперт по SAP BASIS

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

Это первая часть статьи про блокировки в 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 транзакции и при этом не является блокировкой на уровне базы данных.

Реализация

Рис. 2. Рабочий процесс блокировки на центральной инстанции.

В свежих релизах SAP систем сервер блокировок инсталлируется в составе отдельной инстанции центральных сервисов (ASCS instance). В данном

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

Источник

sidadm

записки SAP Basis консультанта

Полезное

понедельник, 8 июля 2019 г.

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

Концепция

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

На уровне сервера приложений 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 транзакции и при этом не является блокировкой на уровне базы данных.

Источник

ABAP Blog

Все о разработке в решениях от SAP

ABAP Blog

Все о разработке в решениях от SAP

Ссылки

Цитаты

Всем известно, что дорога в ад программирования вымощена глобальными переменными…

С. Макконнэл.

Новое

Последние комментарии

Концепция блокировок в SAP

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

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

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

СУБД физически блокирует записи в таблице во время их изменения, например: если используется синтаксис SELECT SINGLE FROM FOR UPDATE. Другие пользователи, которые хотят изменить те же данные, должны ожидать пока физическая блокировка будет снята. В конце ЛЕР (логической единицы работы, англ. LUW) базы данных все физические блокировки снимаются. В системе R3 это означает что при каждой смене экрана, будет сниматься физическая блокировка базы данных, так как при смене экрана вызывается неявный DB COMMIT, тем самым завершая ЛЕР базы данных. Следовательно, физической блокировки записей средствами СУБД не достаточно, если данные собираются на нескольких экранах и необходимо сохранять блокировку во время их переключения. (использование множества экранов при сборе данных не является единственным вариантом вызова неявного DB Commit).

Для сохранения блокировки, в случае использования множества экранов (и не только), в системе R3 используется глобальная таблица блокировок, которая служит для установки логических блокировок для записей в таблицах. Все логические блокировки (далее блокировки) не зависят от сервера приложений, на котором они были вызваны, т.о. они являются общими для всех серверов приложений.

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

Допускается использование специального символа @ при передаче значений параметров. Если указать в качестве значения параметра — 12345@, будут заблокированы объекты в диапазонах: от 123450 до 123459, от 12345a до 12345z, от 12345A до 12345Z и все объекты со специальными символами в 6-й позиции.

Таким образом, мы можем заблокировать таблицу от записи на уровне манданта, материала, завода. Свои объекты блокировок должны называться, начиная с EY или EZ. Кроме того важной особенностью системы блокировок является то, что мы можем заблокировать еще не созданный (не существующий) объект. После создания и активации объекта блокировок, модули блокирования/деблокирования создаются автоматически.

Установка, настройка и администрирование логических блокировок

При вызове модуля блокирования система может вернуть два исключения. Первое FOREIGN_LOCK – означает, что блокировка уже установлена ранее. SYSTEM_FAILURE – системная ошибка механизма блокировок.

Данные исключения необходимо корректно обработать, например: попросить пользователя подождать или сообщить о блокировании ресурса. Обратите внимание, что если блокировка не сработает, из-за уже установленной ранее, в системные переменные сообщений запишутся данные об ошибке, в частности параметр SY-MSGV1 будет содержать имя пользователя установившего блокировку.

В случае завершения работы ABAP программы, все блокировки снимаются автоматически (неявно, но если произойдёт разрыв сети, то блокировка какое-то время будет «висеть» в системе). Кроме того, блокировки могут так же сниматься программой обновления, за эту логику отвечает параметр _SCOPE (описание ниже). При вызове сообщений с типом X или A, вызовом команды LEAVE PROGRAM, LEAVE TO TRANSACTION или вводом команды /n блокировки так же снимаются.

Если вы хотите снять все блокировки в программе можно воспользоваться ФМ: DEQUEUE_ALL. Для просмотра таблицы блокировок можно использовать транзакцию SM12, или ФМ: ENQUE_READ. Для удаления записи из таблицы блокировок ФМ: ENQUE_DELETE (или тр. SM12).

Параметры EUQUEUE модуля

Mode_ — режим блокировки. Перезаписывает режим блокировки из объекта блокировки:

Кроме вышеуказанных режимов есть еще и другие значения этого параметра, которые выступают в роли команды для модуля блокировки:

На рисунках ниже демонстрируется, что будет происходить при установке блокировок в разных режимах (если программа ранее уже установила блокировку на объект и если блокировка была установлена другой программой):

— при вводе параметров вы указываете, какие записи в таблицы будете блокировать.

X_ — в случае если значение равно X, блокируются записи с пустыми значениями.

_SCOPE – может принимать следующие значения:

_wait – если значение «X», функциональный модуль, в случае если уже стоит блокировка, будет ожидать определённый промежуток времени перед повторным вызовом ФМ. Количество повторений задаётся параметром в профиле (RZ11) — ENQUE/DELAY_MAX. Время, которое будет ожидать система 1 секунда (по умолчанию), параметр ENQUE/DELAY_MAX_REFINE отвечает за то, сколько раз в секунду будет происходить проверка.

Читайте также:  Рэа онкомаркер что это значит

_collect – отвечает за то, что блокировка, перед тем как попасть в таблицу блокировок, будет помещена во временный буфер, после чего используя ФМ: FLUSH_ENQUEUE весь этот буфер будет отправлен на сервер блокировок (в таблицу блокировок), в случае если хотя бы одна блокировка не удалась, система выдаст исключение. Для очистки буфера служит ФМ: RESET_ENQUEUE. Используется при множественной блокировке объектов.

Две концепции применения блокировок при изменении данных

Если вы хотите быть уверенными в том, что редактируете актуальную версию данных и намерены её сохранить в базе данных, следует использовать одну из концепций установки блокировок: пессимистичную и оптимистичную. Оптимистичная концепция была внедрена начиная с версии ABAP 7.0. EhP2.

Пессимистичная блокировка (классическая) использует следующий порядок действий:

Как было сказано выше, оптимистичные блокировки используются, когда пользователю отображаются данные в режиме изменения, но менять их в текущий момент пользователь не хочет. Если пользователь захочет сохранить измененные данные, ему потребуется сначала преобразовать блокировку из оптимистичной в блокировку на запись (эксклюзивную, режим «E»). Преобразование происходит путём вызова модуля блокировки с указанным режимом «R». Преобразование не сработает, если была выставлена другая блокировка в режиме E (X) или S. Если преобразование было успешным, другие оптимистичные блокировки будут сняты, выставлена одна с типом E.

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

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

Источник

MIRO: блокировка платежей по счетам-фактурам. Часть II

Башкатов Олег Викторович

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

Отклонение по срокам

Система вычисляет разность между датами (в днях): плановой датой поставки, указанной в позиции заказа на поставку, и датой ввода счёта-фактуры; полученную разность система умножает на сумму позиции и сравнивает со стоимостью, указанной в коде допуска.

Для данного отклонения используется код допуска ST(Отклонение по срокам (стоим. * дни)).

Отмечу, что разность дат вычисляется без учета производственного календаря (нет разделения на рабочие и праздничные дни).

Рис.30 Вычисление разницы в днях между плановой датой поставки позиции заказа на поставку и текущей датой

Настройки приведены на рисунке ниже.

Рис.31 Настройка кода допуска ST (Отклонение по срокам (стоим. * дни))

Характеристика заказов на поставку приведена в таблице ниже.

Таблица 3 Характеристика заказов на поставку для демонстрации отклонения по срокам

Номер

Плановая дата поставки

Дата счета

Сумма позиции

Комментарий

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

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

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

Рис.32 Сообщение о блокировке входящего счёта для платежа

При проводке входящего счёта по заказу на поставку 4500000033 система не будет блокировать счет, несмотря на такую же разность дат, как и в случае выше. Разность дат составляет 75 дней; однако сумма позиции составляет 10 руб.; следовательно, с границей допуска будет сравниваться сумма 75 * 10 руб = 750 руб.; это не превышает границу допуска (в нашем примере 10 000 руб.), следовательно, нет причин для блокировки счёта для платежа.

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

Стохастическое блокирование

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

Рис.33 Активация стохастического блокирования для БЕ

Настройка, представленная на рисунке ниже, означает, что счета-фактуры на сумму более 500 рублей будут блокироваться с вероятностью 50%.

Рис.34 Настройка порогового значения и вероятности стохастического блокирования для счёта-фактуры

Ручное блокирование

При проводке счёта-фактуры можно сделать ручное блокирование.
На уровне заголовка это делается на вкладке «Платеж».

Рис.35 Ручное блокирование входящего счёта.

Деблокирование блокированных счетов (MRBR)

Рис.36 Путь к транзакции MRBR

В данной транзакции можно просмотреть причины блокировки входящих счетов.

Рис.37 Перечень блокированных счетов-фактур с указанием причины блокирования

Для деблокирования необходимо выделить нужные строки и нажать «зеленый флажок» на верхней панели.

Рис.38 Пометка нужных счетов-фактур для деблокирования

Затем нужно нажать кнопку «Сохранить» (пиктограмма