Распределенные транзакции

dimade
Дата: 16.10.2003 13:18:07
Ситуация такая.

На сервере создан link-сервер на самого себя. Сделано для того, чтобы пользователь одной из БД мог входить под другими правами в другую БД (все это внутри одного сервера).

Т.е.
БАЗА1 - пользователь USER1
БАЗА2 - пользователь USER2
link_сервер.БАЗА2 - пользователь USER1 (с правами USER2), это указывается в свойствах link-сервера.

Далее ставим на таблицу БАЗА1 триггер, который обновляет таблицу link-сервер БАЗА2 (по сути это распределенная транзакция).
Напрямую обновить БАЗА2 нельзя, у пользователя USER1 нет на это прав.

В итоге происходит ошибка.
Текст ошибки:
Another user has modified the contents of this table or view; the database row you are modifying no longer exists in the database.
Database error: [Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator].
[Microsoft][ODBC SQL Server Driver][SQL Server]OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoi
JoinTransaction returned 0x8004d00a].
[Microsoft][ODBC SQL Server Driver][SQL Server]The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.'

(Одно предложение вроде обрублено из-за границы окна сообщения).

Выполняем запрос триггера из Query Analyzer (обновление таблицы на link-сервер.БАЗА2 под пользователем USER1) - все работает.

Получается, что распределенные транзакции из триггера не работают? Или настройки MS DTC нужны другие?
iSestrin
Дата: 16.10.2003 14:43:53
msdtc должен быть запущен,
все действия в триггере (а значит уже внутри транзакции) с линкед сервером нужно обернуть распределенной транзакцией, т.е. begin distributed tran etc.