Объекты блокировки

ABAP Data Dictionary. Объекты блокировки

Объекты блокировки

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

Концепция

Транзакции базы данных должны удовлетворять концепции 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, является более широким понятием, чем транзакция базы данных. Понять разницу поможет следующая схема.


СУБД физически блокирует записи в таблице во время их изменения, например: если используется синтаксис SELECT SINGLE <f> FROM<dbtab> FOR UPDATE. Другие пользователи, которые хотят изменить те же данные, должны ожидать пока физическая блокировка будет снята. В конце LUW базы данных все физические блокировки снимаются.

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

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

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

Реализация 

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

Объекты блокировки определяются в словаре данных ABAP. Объект блокировки создает два функциональных модуля, ENQUEUE и DEQUEUE, которые можно вызывать в программах ABAP для блокировки и разблокировки объектов соответственно.


Вкладка «Таблицы». Имя основной таблицы и режим блокировки. Режим блокировки определяет, как реализована блокировка.

Следующие параметры могут быть установлены для режима блокировки:

-Блокировка от записи(E): когда применяется монопольная блокировка, заблокированные данные могут отображаться или редактироваться только одним пользователем. Любые дальнейшие запросы либо на другую эксклюзивную блокировку, либо на общую блокировку отклоняются.

-Блокировка от чтения(S): при применении общей блокировки несколько пользователей могут получить доступ к данным в режиме чтения. Однако, как только один пользователь перейдет в режим изменения для обработки данных, второй пользователь не будет иметь никакого доступа к данным. Запросы от дополнительных общих блокировок принимаются, даже если они от разных пользователей. Блокировка от записи отклоняются.

-Расширенная блокировка от записи(X). В отличие от блокировки от записи, которая может быть запрошена одной и той же транзакцией несколько раз, расширенная блокировка от записи может быть запрошена одной и той же транзакцией только один раз. Каждый последующий запрос на блокировку будет отклонен.

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

-Стимулировать оптим. блокировку, преобразовать из 'O' в 'E' (R): Преобразует оптимистическую блокировку в блокировку от записи.

-Проверка возможности установки блокировки (U,V,W) — проверка возможности установки блокировки в режимах X,E,S соответственно.

Ключевые поля таблицы заполняются автоматически.

После активации объекта блокировки система генерирует два функциональных модуля: имя ENQUEUE_obj и имя DEQUEUE_obj.Эти функциональные модули можно вызывать в программах ABAP для установки и снятия блокировок. Параметры блокировки передаются функциональному модулю во время запросов на установку или снятие блокировки.

Мониторинг

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

Источники: 

Комментарии