Текущее время: Вс, авг 03 2025, 06:07

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 18 2007, 09:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Мда, а факт выставления zg_job_finished всегда успешно фиксируется в родителе?

Да, всегда. Вообще не было ни одного случая COMMUNICATION_FAILURE или SYSTEM_FAILURE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 18 2007, 09:41 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Родилась идея! Попробую заменить LOOP ... WAIT ... ENDLOOP на прогрессивную конструкцию WAIT UNTIL log_exp UP TO n SECONDS.


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

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Родилась идея! Попробую заменить LOOP ... WAIT ... ENDLOOP на прогрессивную конструкцию WAIT UNTIL log_exp UP TO n SECONDS.


Это всмысле поиграться с освобождением-неосвобождением рабочих процессов?
Помнишь, еще обсуждали RZL_SLEEP ?

И еще, наверно не Ваш случай, но
http://www.sapnet.ru/viewtopic.php?t=436


Последний раз редактировалось vga Чт, окт 18 2007, 11:03, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 18 2007, 11:02 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Может, здесь что-нибудь найдётся...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 18 2007, 12:46 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
а может просто на момент вызова аRFC просто нет свободных диалоговых процессов - поэтому ничего не выполняется и следов нет и несистемность ошибки.
И еще вопрос а вы используете aRFC чтобы откатить всю транзакцию - если в той части которая к GUI обращается какой-то сбой будет ?


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

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

Ещё раз повтрю, всё наоборот: основная программа, perform on commit и aRFC выполняются без ошибок (что достоверно фиксируется в БД SAP, в файлах на сервере приложений и в БД пользователя), update-модули — не стартуют.

dump написал(а):
И еще вопрос а вы используете aRFC чтобы откатить всю транзакцию - если в той части которая к GUI обращается какой-то сбой будет ?
Если возникает хотя бы подозрение на ошибку или таймаут, то усилием воли (message type X) всё валится в дамп без всяких колебаний.


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

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
так может VB процессов нет свободных на тот момент


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

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
может попробовать локальное обновление


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

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
И еще в документации нарыл:
Note that a database COMMIT may occur in certain circumstances after a WAIT statement. For this reason, do not use WAIT between two Open SQL statements that open and close a database cursor (such as SELECT...ENDSELECT).


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
COMMIT здесь роли играть не должен, т.к. даже если и происходит, то в другом LUWе.
Насчет попробовать LOCAL TASK - +1.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 18 2007, 14:31 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
1.А почему другой LUW ?

All subroutines called with PERFORM ... ON COMMIT are processed in the LUW concluded by the COMMIT WORK command. All V1 update requests specified in CALL FUNCTION ... IN UPDATE TASK are also executed in one LUW. When all V1 update requests have been successfully concluded, the V2 update requests (update with start delayed ) are processed, each in one LUW. Parallel to this, the function modules specified in CALL FUNCTION ... IN BACKGROUND TASK are each executed in one LUW per destination.

2.здесь происходит COMMIT WORK в модуле PERFORM ON COMMIT

COMMIT WORK may not be used during the update (CALL FUNCTION ... IN UPDATE TASK) or during the execution of FORMs that were registered using PERFORM ... ON COMMIT or PERFORM ... ON ROLLBACK.

что происходит с модулями V1 IN UPDATE TASK - зарегистрированными для предыдущего LUW ? - они не выполняются


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
dump написал(а):
так может VB процессов нет свободных на тот момент
Если что-то не в порядке с процессом обновления, то всё отображается в sm13.

dump написал(а):
2.здесь происходит COMMIT WORK в модуле PERFORM ON COMMIT

Если в perfrom on commit написать COMMIT WORK или ROLLBACK WORK, сразу будет дамп.

Да, Вы правы, не только WAIT, но и CALL FUNCTION ... STARTING NEW TASK, и create object вызывают DB commit. Не надо путать его с COMMIT WORK.

Что на самом деле происходит я уже написал: меняется vbkey.

Можно даже побаловаться и в perform on rollback вызывать CALL FUNCTION 'DB_COMMIT' и тогда все локальные обновления сохранятся, а update-процесс не стартует. Такой же эффект будет, если сначала вызвать DB_COMMIT, а потом ROLLBACK WORK. Но, насколько я помню, ROLLBACK WORK не меняет vbkey, а только очищает таблицы vbmod, vbdata. Меняет vbkey именно COMMIT WORK. В общем, всё это баловство и отношения к делу никакого не имеет.

************

Как известно, перед тем, как использовать помощь зала, не следует оглашать собственную версию. Так вот, открою последние карты: создание OLE объекта в среднем по ансамблю примерно в 20% случаев приводит к изменению vbkey вне зависимости от того, где он создаётся (в обычном процессе, в perform on commit или в асинхронном ф.м.). Когда это создание вынесено в асинхронный ф.м., то ОНО необъяснимым образом "просачивается" в родительский процесс и тоже вызывает смену vbkey, но происходит это существенно реже. К сожалению, проверить, что на самом деле происходит в ядре SAP непросто.

Более того, даже смоделировать ситуацию в лабораторных условиях не получилось. Создавал этот OLE объект в минимальной тестовой программе на своей персоналке ~100000 раз. ЭТО не случилось. Причин этому можно нафантазировать кучу: хотя бы то, что кол-во занимаемой оперативной памяти в тестовой программе минимально, а при создании документа материала в момент создания OLE объекта срывается стек и т.д. и т.п.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 19 2007, 08:34 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Что-то меня берут сомнения... какая связь может быть между созданием OLE - объекта и регистрацией процесса обновления?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 19 2007, 08:59 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
IMHO, самое подозрительное звено, через которое могут взаимодействовать LUW основного и асинхронного процесса -это call-back функция. Может вообще отказаться от ее использования, и поскольку процессы запускаются на одном сервере приложений, в качестве флага завершения асинхронного процесса использовать SAP memory через GET/SET PARAMETER? Пусть даже в качестве эксперимента.
Все же есть подозрение на неудачное окончание работы через OLE.

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

PS: и еще, не ведется ли статистики, что глюк происходит в случае перекрытия процессов обновления от нескольких юзеров? Статистика ошибок наталкивает на эту мысль. Может блокировок каких-то добавить, чтобы недопускать перекрытие процессов, а выполнять их последовательно.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
EGF написал(а):
Что-то меня берут сомнения... какая связь может быть между созданием OLE - объекта и регистрацией процесса обновления?
Вот, и меня тоже! Тем более, что одно на фронтенде, а второе — на сервере приложений. Однако статистика двух последних дней доказывает этот факт.
Code:
CALL FUNCTION 'TH_GET_VBKEY' IMPORTING VBKEY = vbkey1.
create object objref 'Z.MyCoolCOMObject'.
CALL FUNCTION 'TH_GET_VBKEY' IMPORTING VBKEY = vbkey2.

даёт vbkey1 <> vbkey2 в ~20% случаев!

Пошуршал по старым записям в табличках, когда ещё вызов OLE стоял до commit work, и понял, что именно это и случалось. Т.е. часть модулей обновления до OLE вызова регистрировались под одним ключом, вторая часть — под другим. Стартовала только вторая часть.

Сейчас вызов OLE стоит в самом конце, поэтому все модули обновления зарегистрированы под старым ключом и не стартует ничего.

************

Замена цикла ожидания на wait until, вроде бы, снизила вероятность возникновения таких случаев. Чтобы сказать уверенно, суточной статистики недостаточно, подождём несколько дней.
Состарюсь — книгу напишу: "Статистические методы анализа ошибок в программирвании".

Кажется я придумал простое решение проблемы "методом дяди Фёдора". Поскольу я знаю старый и новый vbkey, то в конце perform on commit можно подменить его в таблицах vbmod, vbdata!


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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