|
![]() |
#1 |
Участник
|
В качестве факультатива - попробуйте найти в сиквеле команду на снятие блокировки
![]() Кроме завершения транзакции
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#2 |
Участник
|
Цитата:
Простым блокировкам обновления это не препятствует Блокировка намерения обновления страниц вешается же при фетче - но она, опять же, не мешает блокировке строк Цитата:
Что бы убедиться, можно сделать простой тест - запустить нижеприведенный код в разных сессиях одновременно, без прерывания паузы (во второй сессии сортировка в выборке должна быть в обратном порядке) X++: InventTable inventTable; ; ttsbegin; select pessimisticLock inventTable order by itemId; //order by itemId desc; - для запуска во второй сессии pause; ttsabort; Если же оба запроса будут запущены с одинаковой сортировкой, то один из запросов будет ожидать снятия блокировки ранее запущенным
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#3 |
Участник
|
Вот, кстати, и ссылка Блокировка курсора
Речь там, правда, про курсоры TransactSQL, но к серверным курсорам это так же применимо (см. про динамические курсоры)
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: fed (5). |
![]() |
#4 |
Участник
|
Eсли while убран, то этот код в отличие от исходного обновит только один уровень (например, если уипарента был еще парень). Цикл там все-таки был не зря, хотя while (true) это конечно code smell не потому, со он "бесконечный" а потому, что условия выхода написаны в необычном месте. С транзакциями стало непонятно - если одна общая(где-то раньше ttsbegin одно, если несколько, то другое.
Интересно также, что произойдет если две транзакции попробуют создать запись в distr одновременно |
|
![]() |
#5 |
MCT
|
Цитата:
X++: ttsbegin; //update //insert ttscommit; ![]() А ты что нибудь можешь предложить конструктивного?
__________________
Axapta book for developer Последний раз редактировалось MikeR; 27.01.2014 в 08:56. |
|
Теги |
базовая информация, транзакции |
|
|