![]() |
|
Управляемая блокировка на план обмена | ☑ | ||
---|---|---|---|---|
0
breezee
29.02.24
✎
06:59
|
Коллеги, добрый день. Случилась проблема. Документ зарегистрировался в плане обмена, но был откат транзакции. За это время документ выгрузился.
У плана обмена режим управления блокировками стоит управляемый. У документа (перемещение товаров, если важно) я тоже для теста поставил режим управления управляемый. У конфигурации стоит режим управления Управляемый. SQL сервер 2014. Чтобы избежать этой проблемы я установил в процедуре ПриЗаписи() где идет регистрация в узел блокировку. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(); ЭлементБлокировки.Область = "ПланОбмена.WMS"; ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; //ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаПеремещение); Блокировка.Заблокировать(); ПланыОбмена.ЗарегистрироватьИзменения(УзелОбменаВМС, ЭтотОбъект.Ссылка); Но я могу спокойно читать в другом сеансе узел после установки блокировки. Почему? Я так же пытался установить на саму ссылку блокировку - тоже не помогло. И, почему-то я не могу нагуглить по теме. Я думаю не у одного меня такой случай возникал) |
|||
1
Волшебник
29.02.24
✎
06:58
|
Не путайте транзакционные блокировки и объектные.
Документ не мог выгрузиться, пока транзакция не была завершена. |
|||
2
breezee
29.02.24
✎
08:20
|
(1) Он прочитался запросом из таблицы изменений по узлу и выгрузился. То есть запрос отработал на грязных данных.
Документ создавался в другой транзакции с несколькими документами в пакете. Я проверял, если в транзакции создать документ - его можно прочитать запросом в другом сеансе до завершения транзакции. Потом он становится "объект не найден" в консоле |
|||
3
Волшебник
29.02.24
✎
08:22
|
(2) Читайте тоже в транзакции
|
|||
4
breezee
29.02.24
✎
08:28
|
(3) Большое спасибо! Попробую
|
|||
5
Волшебник
29.02.24
✎
08:51
|
(4) Только малыми порциями, чтобы не сильно блокировать таблицы. Хотя если у Вас успел выгрузиться незаписанный документ, то обмен у вас должен быть именно такой: частый и малыми порциями.
|
|||
6
mikecool
29.02.24
✎
10:08
|
(2) "если в транзакции создать документ - его можно прочитать запросом в другом сеансе до завершения транзакции" - это как так? какой уровень изоляции?
|
|||
7
Волшебник
29.02.24
✎
10:14
|
(6) Если чтение без транзакции, то вполне возможно. Чтобы изолировать, чтение тоже нужно производить в транзакции.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |