AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
CRM
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.09.2013, 17:12   #15  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я этого никогда не пробовал, но можно попытаться. Начиная с версии SQL 2005 есть такой специальный уровень изоляции транзакций: SNAPSHOT ISOLATION. Если ты в скрипте на T-SQL пишешь SET TRANSACTION ISOLATION SNAPSHOT, а потом начинаешь транзакцию через вызов BEGIN TRANSACTION, то в системе включается версионная машина и твои запросы не видят ВСЕ изменения данных, которые были сделаны после того как ты выполнил вызов BEGIN TRANSACTION. То есть - консистентное состояние сохраняется не в рамках одного запроса, а для всех запросов внутри транзакции.
Есть, правда, некоторые "НО":
  1. Поддержку этого режима надо включать на уровне базы данных.ALTER DATABASE SET ALLOW_SNAPSHT_ISOLATION ON. Это некоторый оверхид создает.
  2. Главная проблема: Насколько я понимаю, до тех пор пока транзакция в коде на X++ не начата, все пользовательские сесии шарят одно соединение и если ты просто так туда залезешь через Connection/Statement и засунешь режим изоляции SET TRANSACTION ISOLATION SNAPSHOT, то этот режим включиться не только для твоей сесии, а вообще для всех пользователей в системе. Если же ты вызовешь ttsbegin, то система тебе выделит отдельную сесию, в которой ты можешь безбоязненно менять уровень изоляции. Но вот поскольку ты уже находишься в режиме транзакции, то смена режима изоляции на SNAPSHOT уже не возможна...

В общем - я бы попробовал все-таки тупо засовывать уровень изоляции через connection/statement, а потом вызвал бы connection.ttsbegin(), чтобы начать транзакцию. Есть большая надежда (хотя я и не уверен), что менежеру соединений в AOS хватит ума выделить отдельное соединение в тот момент когда ты connection вызываешь, а не в тот момент когда ты транзакцию начинаешь. Кроме того, помнится мне говорили, что то самое разделяемое соединение используется ТОЛЬКО логикой на формах, а если ты пишешь запрос в классе, то система использует выделенное соединение, которое прикрепляется к пользовательской сесии до тех пор, пока класс не отработает...

Последний раз редактировалось fed; 09.09.2013 в 17:23.
Теги
остатки на дату

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Связывание источников данных в запросах r25 DAX: Программирование 10 17.04.2013 22:45
Создание снимков изменений в базе данных Ace of Database DAX: Программирование 17 01.11.2011 12:34
Скрипт для переноса данных Ax3.0 (Oracle) - Ax2009 (MSSQL) someOne DAX: Программирование 2 14.06.2011 14:53
Невозможно выполнить команду языка определения данных в () iHomer13 DAX: Программирование 8 18.07.2008 10:56
Как проверить целостность данных ledenezz DAX: База знаний и проекты 5 07.12.2007 05:35

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:57.