TUniTable.Post и запрос к linked-серверу

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Закрыто
vfisher
Сообщения: 13
Зарегистрирован: Вт 06 май 2014 15:44

TUniTable.Post и запрос к linked-серверу

Сообщение vfisher » Чт 24 янв 2019 13:03

Добрый день.

При использовании TUniTable на таблице с триггерами, выполняющими запросы на linked-серверах имеет место быть ошибка

Msg 3933, Level 16, State 1
Cannot promote the transaction to a distributed transaction because there is an active save point in this transaction.

Это происходит из-за того, что создаются сейвпоинты во время выполнения Post:
SAVE TRANSACTION LOCK_test

В TUniTable при этом LockMode = lmOptimistic. Если использовать LockMode = lmNone сейвпоинты не создаются и проблема исчезает.

Вопрос, чем чревато использование lmNone вместо дефолтного lmOptimistic и какие еще есть пути решения данной проблемы?

Stellar
Devart Team
Сообщения: 20
Зарегистрирован: Чт 07 дек 2017 14:56

Re: TUniTable.Post и запрос к linked-серверу

Сообщение Stellar » Пт 25 янв 2019 15:08

Блокировка записи полезна при создании многопользовательских приложений. Это предотвращает изменение записи несколькими пользователями одновременно. При использовании LockMode равным lmNone изменениe записи будет выполняться без блокировки.
При попыткe выполнить изменение данных на linked-сервере из триггера Sql Server пытается начать распределенную транзакцию.
Это поведение сервера, на которое мы не можем повлиять.

Закрыто