Показать сообщение отдельно
Старый 14.09.2007, 20:03   #4  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
raz, спасибо за интересную тему для размышлений.

Вам стоило указать, что вы писали про 3.0 под MS SQL (я слыхал, что в Oracle считать в другой сессии незакомиченные данные невозможно).

Чтобы подобного рода ситуации для вас не были неожиданностью, рекомендую вам для прочтения параграф "Transaction Semantics" из книжки Inside Microsoft Dynamics™ AX 4.0. Он находится в 12-й главе третьей части.

Там также очень интересное приложение В (касаемо 4.0 и различных СУБД).

http://safari.oreilly.com/9780735622579/app02#app02

Надеюсь, что это постоянная ссылка.

Получается, что если в 3.0 на MS SQL Аксапта норовила почти везде прикрутить к запросу NOLOCK (в запросах из форм, отчетов, в запросе из кода не внутри транзакции), то в 4.0 запросы идут с READ COMMITTED (даже из форм, отчетов, обозревателя таблицы). Так, в 3.0 можно было открыть форму, и увидеть в ней строчку, которая еще не закомичена. В 4.0 в такой ситуации клиент подвисает до тех пор, пока транзакция не закроется или не откатится.

Другими словами желаемый вами эффект READ COMMITTED достигается без транзакции. Хотя если вы хотите еще и от блокировок избавиться, то ваше решение остается в силе (мне удалось заставить работать .readPast(true) только внутри транзакции).

А вот у меня возник такой вопрос. Каким образом из Аксапты 4.0 можно отправить запрос на MS SQL 2005, чтобы в нем таки был хинт NOLOCK? И как отправить запрос, чтобы он отработал при уровне изоляции транзакции SNAPSHOT, если таковой режим включен для БД? Я пытался на ощупь, но не смог пока добиться такого эффекта. Поиск также не помог мне найти ответ на вопрос. Может быть кто-то сможет подсказать?
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: Logger (3), iCloud (2).