Текущее время: Чт, апр 18 2024, 08:51

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 13:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
sy-uname написал(а):
Границами является завершение V1 процесса, т.к. имеено там либо ставиться "окончательный" commit, либо, при возникновении ошибки в одном из ФМ происходит откат.

Дискуссия сводится к лингвистике. Может строго формально и нельзя так говорить, но правильно понять труда не составляет и к путанице не приводит.

Ещё раз: в рамках прикладного процесса после commit work начинается новый SAP LUW. Старый хоть и не завершается, но это всё же граница между двумя SAP LUW.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 13:34 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
sibrin написал:
dump написал(а):
это если используются update модули - а если обычное обновление в диалоговом процессе - оно всегда синхронное так как дальше выполнение процесса не идет пока не закоммитятся обновления.

Это локальное обновление.
sibrin написал:

локальное обновление это если update модуль выполняется в диалоговом процессе в котором он был зарегистрирован при указании SET UPDATE TASK LOCAL перед его вызовом - и обновление в этом случае синхронное

sibrin написал:
Ну, хорошо, чтобы не зацикливаться на абстрактных спорах по поводу определений, давай рассмотрим всё на примере кусока кода, который я привёл. Допустим, что не существует uppdate-процессов и update-модулей. Сколько там SAP LUW'ов?.


SAP LUW один, а включает в себя 2 DB LUWа.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 13:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
dump написал(а):
SAP LUW один, а включает в себя 2 DB LUWа.

Это прямое противоречие с основным принципом любого LUW.
Если sy-subrc <> 0, то первый ztable1 обновится, а ztable2 — нет.
Какой же это unit of work?

Да и в определении SAP LUW чёрным по белым написано: changes are written to the database in a single database LUW.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 13:59 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
sibrin написал:
dump написал(а):
SAP LUW один, а включает в себя 2 DB LUWа.

Это прямое противоречие с основным принципом любого LUW.
Если sy-subrc <> 0, то первый ztable1 обновится, а ztable2 — нет.
Какой же это unit of work?

Да и в определении SAP LUW чёрным по белым написано: changes are written to the database in a single database LUW.


так в том то и дело что это уже разработчик должен строить программу так чтобы то что должно быть записано вместе попадало в один DB LUW и не допускать чтобы было по-другому - в твоем примере - кто кроме тебя знает что ZTABLE 1 и ZTABLE2 должны обновляться вместе ? системе все равно - может так и надо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 14:06 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
sibrin написал:
Да и в определении SAP LUW чёрным по белым написано: changes are written to the database in a single database LUW.


конечно это неправильный SAP LUW так как обновления попали в 2 DB LUWа - а не в один


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 14:11 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
dump написал(а):
конечно это неправильный SAP LUW так как обновления попали в 2 DB LUWа - а не в один

:) Это опять какое-то новое понятие. Я такого в SAP library не встречал. :)


Последний раз редактировалось sibrin Вс, янв 20 2008, 14:35, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 14:34 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
:D ну тут как угодно можно ситуацию выкрутить - если эти две таблицы должны вместе обновляться тогда это не LUW - если нет то LUW


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 14:35 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
dump написал(а):
:D ну тут как угодно можно ситуацию выкрутить - если эти две таблицы должны вместе обновляться тогда это не LUW - если нет то LUW

Т.е. правильный SAP LUW состоит из одного DB LUW. Значит в моём примере правильный SAP LUW начинается сразу после create object.
Таким образом получается, что SAP LUW тождественен DB LUW. (Про update bundling мы пока договорились забыть.)

В самом начале я и предложил это называть такой случай вырожденным SAP LUW'ом. Только в SAP Library для такого вырожденного случая термин SAP LUW, по-моему, нигде не применяется. Ещё раз прошу, если есть такое место — подскажите, буду очень признателен.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 14:55 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
sibrin написал:
dump написал(а):
:D ну тут как угодно можно ситуацию выкрутить - если эти две таблицы должны вместе обновляться тогда это не LUW - если нет то LUW

Т.е. правильный SAP LUW состоит из одного DB LUW. Значит в моём примере правильный SAP LUW начинается сразу после create object.


SAP LUW начинается в начале программы и состоит из двух DB LUWов - только CREATE OBJECT его либо разрушает ( если таблицы должны обновляться вместе ) либо нет ( если синхронное обновление таблиц не критично ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 18:06 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Цитата:
A new internal or external session is started by either a SUBMIT, CALL TRANSACTION, BATCH INPUT MAP, CALL FUNCTION STARTING NEW TASK, CALL FUNCTION IN UPDATE TASK statement. Updates within these procedures start their own LUW.

Чепуха какая-то. Здесь написано, что внутри CALL FUNCTION IN UPDATE TASK начинается новый LUW. Какой здесь имеется в виду? Ни DB LUW, ни SAP LUW там начинаться не могут, если это v1-модуль!

Цитата:
Using the CALL FUNCTION IN UPDATE TASK implies creating a NEW once.
Это тоже неправильно. SAP LUW начинается именно с начала внутренней сессии, ну или сразу после commit work, а не в тот момент, как вызывается первый update ф.м. Хотя бы потому, что set update task local должна стоять между началом SAP LUW и первым зерегистрированным Update модулем. (Понятно, что set update task local "подцепляет" к SAP LUW апдейты из последнего DB LUW'a и нельзя SAP LUW ассоциировать только с update-процессом.)

Откуда цитата? В SAP Library не нашёл такого.
[/code]


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

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

Практически все что написано в этой книге, вы назвали чепухой. Ну что ж, вам виднее. SAP Press - фигня какая, а не издательство :D

_________________
С уважением, VGA
Мой блог


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 21:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Практически все что написано в этой книге, вы назвали чепухой. Ну что ж, вам виднее. SAP Press - фигня какая, а не издательство :D

Ну, вообще-то я написал, что именно я считаю неправильным в приведённой цитате. Сравнил с тем, что написано в книге: там всё правильно, а Вы, уважаемый коллега, переврали текст первого предложения. В книге так:
Цитата:
A new internal or external session is started by either a SUBMIT, CALL TRANSACTION, or CALL FUNCTION STARTING NEW TASK statement. Updates within these procedures start their own LUW.


Почитал этот раздел — у автора в голове каша. Он не различает SAP LUW и DB LUW, а использует один термин: LUW.
Сначала пишет: "Each LUW starts and ends with an implicit or explicit commit rollback". Т.е. очевидно имеется в виду DB LUW.
А в том месте, которые цитировал vga, очевидно уже подразумевается SAP LUW.

LUW — это концепция обработки данных: либо всё, либо ничего. А DB LUW и SAP LUW — это два разных механизма технической реализации этой концепции.

Так что прямые апдейты работают в рамках DB LUW. Почему vga и dump относят их к SAP LUW, мне не понятно.

Цитата:
В SAP Library практически ничего не раскрывается, все что связано со внутренней работой системы, в частности алгоритм работы апдейтной программы.

А где же тогда раскрывается??? Не обсуждаемую же книгу Вы имеете в виду. Где написано подробнее, чем в Library, про perfrom on commit, v1 и v2 процессы, порядок их выполнения, раскладка их по DB LUW'ам, принципы отката в случае ошибки, взаимодействие с блокировками, инструментарий (sm13) и т.д.? В SAP Library информация сжатая, но наиболее полная (по крайней мере по данном разделу). Не святотатствуйте — это наша Библия! :) Вот если найдёте источник, где объясняются все значения sy-oncom...

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


Jelena написала:
Я бы предположила, что все 3 функции выполнятся в том порядке, как они прописаны

Я посмотрел книгу: Вы правы. Это ошибка. Во втором случае должно быть написано: "Triggering the update process to execute all three UPDATE TASK functions within one logical unit".


Последний раз редактировалось sibrin Вс, янв 20 2008, 22:22, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 22:20 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Если я вас чем то оскорбил, приношу извинения.

Если Вы не против, давайте все же вернемся к таблице в книге, раз уж появилась возможность видеть ее в оригинале.
Вы считаете, что строка в книге в таблице 'CALL FUNCTION IN UPDATE TASK' и галочка, что она выполняется в New LUW и примечение внизу - это ошибка?

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

_________________
С уважением, VGA
Мой блог


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 22:26 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Цитата:
В SAP Library практически ничего не раскрывается, все что связано со внутренней работой системы, в частности алгоритм работы апдейтной программы.

А где же тогда раскрывается???


Практикой, очень многое понимается под отладчиком. SAP Lib зачастую недостаточно для понимания работы системы, только часы проведенные под отладной дают ясность. Дебагер - вот наша библия ;-)

_________________
С уважением, VGA
Мой блог


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, янв 20 2008, 22:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Вы считаете, что строка в книге в таблице 'CALL FUNCTION IN UPDATE TASK' и примечение внизу - это ошибка?

Там просто каша, в частности и из-за того, что автор не различает DB LUW и SAP LUW. Автор пишет, что submit начинает LUW и первый вызов call function in update task начинает LUW. Только чтобы он был прав, в первом случае нам нужно подразувать DB LUW, а во втором — SAP LUW. Но почему в таком случае в таблице не приведены ещё масса случаев, когда закрывается DB LUW?

PS. Может быть я не совсем прав, что SAP LUW начинается не с регистрацией первого update-модуля, а именно c submit. Можно считать, что set update task local не модифицирует уже открытй SAP LUW, а влияет на то, как он будет создаваться при вызове первого update-модуля.
В общем, это напоминает проблему, с какой стороны лучше разбивать яйцо.

vga написал(а):
Практикой, очень многое понимается под отладчиком. ... Дебагер - вот наша библия
Бесспорно. Ну разве что лучше было бы сказать не дебаггер, а исходный код. Хотя лучший инструмент для изучения системных программ, действительно дебаггер.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, янв 21 2008, 11:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Можно и я отмечусь... (только не ногами! :D )
Попробую "показать пальцем"...

В общем:
Итак, когда выполнение доходит до CALL FUNCTION IN UPDATE TASK, то на самом деле вызова не происходит, а происходит INSERT в особую табличку VBЧТО-ТО-ТАМ. Записывается имя функции и значения всех параметров, которые указаны в этом вызове. Сколько вызовов, столько и записей в этой табличке и в той последовательности, в которой эти конструкции выполнялись.

Потом в какой-то момент случается COMMIT. Тогда во-первых, происходит обычный COMMIT в базе, и таким образом, "подтверждаются" записи в табличку VBЧТО-ТО-ТАМ, а кроме того "подтверждаются" и все остальные записи, которые в программе до этого COMMIT'а были сделаны операторами SQL INSERT/UPDATE/DELETE.
Во-вторых, передается сигнал особому параллельному процессу (процессу обновления), который все время работает на сервере приложений (таких процессов может быть несколько). Этот процесс начинает орабатывать записи из таблички VBЧТО-ТО-ТАМ, как раз в той последовательности, в которой выполнялись операторы CALL FUNCTION IN UPDATE TASK, и вот тут уже происходит настоящий вызов функций обновления с нужными параметрами и в нужной последовательности.

Что из этого следует: в процессе обновления данных получается как минимум два LUW, первый - в самой программе, которая выполняется в диалоговом или фоновом процессе, второй - в процессе обновления (update process). Именно поэтому случается, что пользователь нажал в FI документе Save, получил сообщение о том, что документ создан по номером ХХХХХХ, а потом, через некоторое время получил экпресс-сообщение об ошибке в процессе обновления.
Или, например, в программе вы вызываете BAPI, делаетте COMMIT и сразу делаете SELECT по номеру созданного документа, и может случиться так, что SELECT вернет sy-subrc = 4, из-за того, что Update process еще не успел обновить таблицы с документами.

Частности:
Режим локального обновления - SET UPDATE TASK LOCAL - если включен, то CALL FUNCITON IN UPDATE TASK выполняется как обычный вызов функции, а значит, после COMMIT'а все изменения буду гарантированно доступны для последующих SELECT'ов.

Приоритет (V1, V2...)
Приоритет обновления определяется атрибутами функции обновления. См. закладку Attributes в SE37
Start immed = V1
Immediate start = V2
start delayed = V3

Все функции обновления V1 вызываются процессом обновления в одном LUW. Если хоть в одном из них случилась ошибка, то откатывается все. После обработки обновлений V1 снимаются блокировки.
Все функции обновления V2 вызываются процессом обновления в одном LUW после того, как обработаны обновления V1. Если хоть в одном из них случилась ошибка, то откатывается все обновления V2.

Первый пример в исходном посте может привести к рассогласованности данных - UPDATE <customer table> сработает раньше, чем обновления основных таблиц, и если при обновлении основных таблиц случится ошибка, то в <customer table> записи "повиснут".

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB