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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.11.2019, 12:30   #1  
valmictar is offline
valmictar
Участник
 
5 / 10 (1) +
Регистрация: 29.11.2019
Как из DAX запустить транзакцию, чтобы она блокировала таблицу во внешней MS SQL базе
DAX 2019
Собственно всё в заголовке
Старый 29.11.2019, 13:48   #2  
axm2017 is offline
axm2017
Участник
 
1,891 / 295 (13) ++++++
Регистрация: 15.05.2017
Я бы посмотрел в сторону Connection ttsbegin\ttscommit
Старый 29.11.2019, 13:58   #3  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Сообщение от valmictar Посмотреть сообщение
DAX 2019
а это что за зверь?

вообще в DAX можно выполнить произвольный запрос SQL к базе DAX
так что выполнить какой-нибудь запрос вроде (код предоставляется as is - что сразу нагуглилось)
Код:
BEGIN TRAN  
SELECT 1 FROM TABLE WITH (TABLOCKX)
WAITFOR DELAY '00:02:00' 
ROLLBACK TRAN   
GO
За это сообщение автора поблагодарили: valmictar (1).
Старый 29.11.2019, 14:02   #4  
Omeo is offline
Omeo
Участник
 
129 / 50 (2) ++++
Регистрация: 18.03.2004
Адрес: Moscow
можно в БД добавить Linked Server на внешний MSSQL Server и бд, из текущей транзакции выполнить запрос вида SELECT * FROM [ExternalMSSQLServer].[ExternalDB].[Table] WITH (updlock)

MSDTC (он же https://en.wikipedia.org/wiki/Micros...on_Coordinator) сделает распределенную транзакцию

Последний раз редактировалось Omeo; 29.11.2019 в 14:04.
Старый 29.11.2019, 14:26   #5  
valmictar is offline
valmictar
Участник
 
5 / 10 (1) +
Регистрация: 29.11.2019
Цитата:
Сообщение от axm2017 Посмотреть сообщение
Я бы посмотрел в сторону Connection ttsbegin\ttscommit
Нужно блокирование от чтения

Не работает
Старый 29.11.2019, 14:29   #6  
valmictar is offline
valmictar
Участник
 
5 / 10 (1) +
Регистрация: 29.11.2019
Цитата:
Сообщение от Omeo Посмотреть сообщение
можно в БД добавить Linked Server на внешний MSSQL Server и бд, из текущей транзакции выполнить запрос вида SELECT * FROM [ExternalMSSQLServer].[ExternalDB].[Table] WITH (updlock)

MSDTC (он же https://en.wikipedia.org/wiki/Micros...on_Coordinator) сделает распределенную транзакцию
Нужно блокировать от чтения, а не только от UPDATE
Старый 29.11.2019, 16:56   #7  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
Цитата:
Сообщение от valmictar Посмотреть сообщение
Нужно блокировать от чтения, а не только от UPDATE
Блокировать на чтение получится только если открыть транзакцию + сделать update записи и подождать, а потом сделать commit или abort. Но и тут никто не может запретить грязное чтение. IMHO лучше сделать дополнительное поле Blocked и работать с ним (если это возможно).
Старый 29.11.2019, 17:51   #8  
valmictar is offline
valmictar
Участник
 
5 / 10 (1) +
Регистрация: 29.11.2019
От грязного чтения защищать не надо, пусть кто хочет, тот читает, а кто не хочет - это наш случай. И в транзакции только INSERTы, нужно чтобы они полностью закончились до того, как будут прочитаны. .

Последний раз редактировалось valmictar; 29.11.2019 в 17:54.
Старый 29.11.2019, 18:48   #9  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от valmictar Посмотреть сообщение
И в транзакции только INSERTы, нужно чтобы они полностью закончились до того, как будут прочитаны. .
А как Вы эти самые insert-ы делаете? Разве их нельзя окружить явными командами начала и окончания транзакции? Можете привести здесь код вставки? Не обязательно детально, просто общую идею организации работы показать
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.12.2019, 10:34   #10  
valmictar is offline
valmictar
Участник
 
5 / 10 (1) +
Регистрация: 29.11.2019
Просто транзакции не хватает.
Решили использованием
TABLOCKX
Указывает, что к таблице применяется монопольная блокировка.
XLOCK
Указывает, что монопольные блокировки применяются и удерживаются до завершения транзакции. Если при этом указан аргумент ROWLOCK, PAGLOCK или TABLOCK, монопольная блокировка применяется к соответствующему уровню гранулярности.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
gatesasbait: Dynamics Ax SQL statements (SQL Strings in DAx) Blog bot DAX Blogs 1 16.04.2008 06:55
Неизвестный сбой!!! Dynamics AX 4.0 SP2 with MS SQL 2005 MarunYA DAX: Администрирование 6 06.12.2007 12:16
обеспечение лучшей производительности ms sql SHiSHok DAX: Администрирование 0 08.12.2005 11:12

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

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

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