iSeries - блокировка записи по тому же заданию / сеансу

У меня проблемы с нижеприведенным сценарием.

Существует блокировка записи для файла MYFILE из Программы A. Позже Session внезапно отключается с блокировкой записи в MYFILE и выполняет процедуру отмены обработчика. В программе-обработчике отмены (Программа B) она пытается удалить запись, заблокированную в MYFILE, и сеанс зависает, потому что файл MYFILE скомпилирован со временем WAITRCD NOMAX. Теперь никто не может получить доступ к учетной записи для любого действия обновления из других сеансов.

Ход программы приведен ниже:

........ Программа A (Блокировка записи) .... Программа X (обработчик отмены) ->OVRDBF WAITRCD(3) добавлена ​​.... Программа B (Session Freeze) -> После добавления OVRDBF выше, сессия не замораживала программу C (происходит зависание сеанса) -> Я все еще вижу, что есть переопределения, и это та же группа активации по умолчанию, без контроля обязательств и без триггеров

Сценарий здесь: блокировка записи по тому же заданию / сеансу.

Я попытался ниже решение, чтобы исправить проблему:

В программе обработки отмены (Программа B) я сделал OVRDBF с WAITRCD от 3 до 5 секунд. Позже были выполнены вышеуказанные шаги, и когда он пришел к отмене программы-обработчика, он устал удалять заблокированную запись и через 3-5 секунд продолжил обработку с последующими шагами и написал сообщение об ошибке для заблокированной записи. Там не было замораживания экрана. Позже он продолжал выполнять другую программу C, где он пытался удалить заблокированную запись в MYFILE. Но теперь сессия снова зависает.

Я проверил стек вызовов, и все программы находятся в группе активации по умолчанию, и здесь нет управления фиксацией и триггеров. Любая идея, почему она преодолела ситуацию блокировки записи из Программы B, а не из Программы C. Пожалуйста, дайте мне знать.

С уважением, Сури

2 ответа

Правильный способ справиться с этим - использовать Программу А для контроля обязательств. Тогда откат будет автоматическим или обработчик отмены может вызвать откат.

Предполагая, что это не вариант.

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

Не компилируйте файлы с WAITRCD = *NOMAX. если заданию нужно ждать блокировок, используйте OVRDBF для настройки времени ожидания. Я предполагаю, что вы ждете, потому что есть пакетные задания, ожидающие интерактивных заданий и тайм-аут, потому что кто-то держит запись открытой на своем рабочем столе. Интерактивные программы не должны блокировать запись, пока она не будет готова к ее обновлению. Это предотвратит эту проблему в первую очередь.

Другие вопросы по тегам