Комментарии по теме

«Ко­рре­кти­ро­вка таблиц базы данных с помощью ABAP»
Олег Точенюк:
Андрей а вам никто никогда не говорил, что обновлять таблицы базы данных SAP категорически запрещено, независимо от того чем обусловлены такие желания. Свои Z-таблицы, да сколько угодно, но......
«Тра­нза­кция SM02: сообщения в SAP системе»
Олег Башкатов:
С помощью ФМ TH_POPUP можно отправить сообщение конкретному пользователю :-)
«MVC или как писать отчеты быстро и просто»
Олег Точенюк:
>>"Самое главное - это расположить инклуды с моделью и представлением до инклуда с контроллером"   А может проще написать в начале что-то типа: CLASS: <имя> DEFINITION...

Тонкие моменты обновления базы данных в ABAP

Павел Мартынов
8004

>

Тонкие моменты обновления базы данных в ABAP

Мартынов Павел, руководитель направления ABAP/Портал. Место работы: ООО «М.видео Менеджмент». Профессиональный опыт: Почти 7 лет занимается разработкой приложений на ABAP. В данный момент занимает должность руководителя направления ABAP/Портал в компании «М. видео».Основная задача управление внутренними разработками, анализ и согласование разработок в рамках проектов внедряемых в компании.

 

В статье изложены общие сведения о транзакционности в языке ABAP, а также рассмотрены некоторые проблемы, связанные с обновлением БД и являющиеся «подводными камнями».

Немного теории

Транза́кция (англ. transaction) — в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, с соблюдением целостности данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще, в каковом случае она не должна произвести никакого эффекта. (Данное определение взято в Википедии) Транзакционность в системе SAP поддерживается на двух уровнях; на уровне СУБД и на уровне сервера приложений:

  • На уровне СУБД транзакционность поддерживается путем открытия ЛЕР (логических единиц работы, английский вариант LUW Logical Unit of Work). В начале выполнения программы при обращении к базе данных открывается ЛЕР на уровне базы данных, далее при работе программы, если происходит явный или не явный COMMIT, то текущий ЛЕР закрывается, все данные сохраняются в БД и открывается новый ЛЕР.
  • На уровне сервера приложений для обеспечения транзакционности используются «модули обновления» ( такие как CALL FUNCTION IN UPDATE TASK, PERFORM ON COMMIT), данные модули при вызове регистрируются в системе, но не выполняются сразу. Система собирает очередь обновления, после того, как в программе появляется явный оператор завершения транзакции (COMMIT WORK), система начинает выполнять последовательно зарегистрированные процессы обновления. Если в программе выполняется явный оператор отката транзакции (ROLLBACK WORK), то система удаляет вызовы из очереди обновления и откатывает текущий ЛЕР на уровне БД.  

Обновление БД в языке ABAP делятся на прямые (direct update) и в модулях обновления:
 

  • Прямые обновления - обновление БД путем вызова операторов UPDATE, DELETE или MODIFY явно в программе на ABAP. В этом случае, данные операторы сразу выполняются в СУБД и попадают в текущую открытую ЛЕР БД.
  • Обновления в модулях обновления – обновление БД путем вызова операторов UPDATE, DELETE или MODIFY в модуле обновления.

Проблемы неявных COMMIT’ов

При обработке программы на сервере приложений системы часто происходит закрытие текущей ЛЕР БД и открытие новой ЛЕР БД в рамках одной программы (неявные COMMIT’ы). Данная ситуация постоянно происходит при обработке экранов. На Рис.1 из справки по обновлению системы видно, что при каждой обработке событий PAI на экране происходит неявный COMMIT, после чего текущий ЛЕР БД закрывается и открывается новый, и все прямые обновления

Ограниченный доступ

Для прочтения полной версии статьи необходимо зайти как зарегистрированный пользователь.

Функциональная область: Информационные технологии / IT, Basis, ABAP
Ролевое назначение: SAP Консультант / Consultant

Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»